Essayer de mapper un tableau d'objets avec des valeurs imbriquées dans la structure des objets enfants comme:
const mapped = objs.map((key, index) => { Object.keys(key).map(el => ({ name: el })) })
à la structure comme:
[ { name: 'B', value: 1 }, { name: 'D', value: '45' }, { name: 'E', value: '234' }, { name: 'A', value: '543' }, { name: 'C', value: '250' } ]
et le résultat du mappage est non défini
const objs = [{ "B": { "value": 1, }, "D": { "value": "45" }, "E": { "value": "234" }, "A": { "value": "543" }, "C": { "value": "250" } },...]
Exemple: Stackblitz
3 Réponses :
return
est manquant dans Object.keys
. De plus, au lieu de Object.keys
, utilisez Object.entries
pour obtenir key
et value
.
p>
const objs = [{ "B": { "value": 1, }, "D": { "value": "45" }, "E": { "value": "234" }, "A": { "value": "543" }, "C": { "value": "250" } }]; const mapped = objs.map((key, _) => { return Object.entries((key)).map(([name, { value }]) => ({ name, value })) }).flat(); console.log(mapped);
Il vous manque l'instruction return
et la définition de la propriété value
.
En outre, vous pouvez utiliser flatMap au lieu de map afin d'éviter un tableau imbriqué dans le résultat:
const objs = [{ "B": { "value": 1, }, "D": { "value": "45" }, "E": { "value": "234" }, "A": { "value": "543" }, "C": { "value": "250" } }] const mapped = objs.flatMap((key, index) => { return Object.keys(key).map(el => ({ name: el, value: key[el].value })) }) console.log(mapped)
Excellent exemple. Existe-t-il un moyen de garder l'ordre des éléments tout au long de l'itération comme dans l'exemple?
Merci! L'ordre des objets en résultat est-il différent de l'ordre des clés? De mon côté, cela semble être le même (B, D, E, A, C).
Vous devez opérer sur objs [0], pas sur objs, car il s'agit d'un tableau d'un objet, pas d'un tableau d'objets.
let array = [] for(let object in objs[0]){ array.push({ "name": object, "value": objs[0][object].value }) }
Mon erreur, je n'ai pas ajouté la structure de données entière (juste trois points), il y a un tableau d'objets comme dans l'exemple sur le stackblitz.
return
est manquant.