0
votes

Extraire les clés et les valeurs de l'objet via un tableau de chaînes en javascript

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"
}


2 commentaires

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 utilisez if (theObjectInQuestion.hasOwnProperty (propertyInQuestion)) {// faire des choses};


5 Réponses :


1
votes

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);


0 commentaires

2
votes

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))


0 commentaires

1
votes

Vous pouvez utiliser la fonction réduire code> pour la construction de l'objet souhaité.

p>

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);


0 commentaires

1
votes

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);


0 commentaires

2
votes

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));


0 commentaires