J'ai des données d'API qui sont renvoyées en tant qu'objet:
{ "name": "Luke Skywalker", "height": "172", "mass": "77" }
J'ai une liste de clés dans un tableau de configuration que je souhaite extraire de la réponse d'origine: p>
let attributes = ['name', 'height', 'mass'];
Comment utiliser le tableau d'attributs pour me rendre un objet comme ceci:
{ "name": "Luke Skywalker", "height": "172", "mass": "77", "hair_color": "blond", "skin_color": "fair", "eye_color": "blue", "birth_year": "19BBY", "gender": "male" }
5 Réponses :
Vous pouvez utiliser la méthode Object.entries
.
let obj = { "name": "Luke Skywalker", "height": "172", "mass": "77", "hair_color": "blond", "skin_color": "fair", "eye_color": "blue", "birth_year": "19BBY", "gender": "male" }; let attributes = ['name', 'height', 'mass']; let picked = Object.fromEntries( attributes.map(att => [att, obj[att]]) ) console.log(picked);
Vous pouvez simplement faire une boucle sur votre tableau:
const obj = { "name": "Luke Skywalker", "height": "172", "mass": "77", "hair_color": "blond", "skin_color": "fair", "eye_color": "blue", "birth_year": "19BBY", "gender": "male" }; let attributes = ['name', 'height', 'mass']; function buildObject(arr, obj) { const res = {}; arr.forEach(item => res[item] = obj[item]) return res } console.log(buildObject(attributes, obj))
Vous pouvez utiliser la fonction p> réduire code> pour la construction de l'objet souhaité.
let obj = {"name": "Luke Skywalker","height": "172","mass": "77","hair_color": "blond","skin_color": "fair","eye_color": "blue","birth_year": "19BBY","gender": "male"},
attributes = ['name', 'height', 'mass'],
{result} = attributes.reduce((a, c) => (Object.assign(a.result, {[c]: a.source[c]}), a), {result: Object.create(null), source: obj});
console.log(result);
Vous pouvez mapper la clé souhaitée avec leurs valeurs et créer un nouvel objet à partir de celle-ci avec Object.fromEntries
.
let obj = { name: "Luke Skywalker", height: "172", mass: "77", hair_color: "blond", skin_color: "fair", eye_color: "blue", birth_year: "19BBY", gender: "male" }, attributes = ['name', 'height', 'mass'], picked = Object.fromEntries(attributes.map(k => [k, obj[k]])); console.log(picked);
L'utilisation de réduire
sera simplifiée.
const update = (data, attrs) => attrs.reduce((acc, attr) => (acc[attr] = data[attr], acc), {}); const data = { name: "Luke Skywalker", height: "172", mass: "77", hair_color: "blond", skin_color: "fair", eye_color: "blue", birth_year: "19BBY", gender: "male" }; let attributes = ["name", "height", "mass"]; console.log(update(data, attributes));
Qu'est-ce que tu as essayé jusque-là?
En utilisant la déstructuration, vous pouvez obtenir les valeurs facilement, car vous connaissez les noms:
let {name, height, mass} = objectWithTheseProperties;
Ou si vous ne savez pas si l'objet a la propriété en question, vous pouvez utilisezif (theObjectInQuestion.hasOwnProperty (propertyInQuestion)) {// faire des choses};