J'essaie de convertir une structure de données comme celle-ci:
data = {
0:{A:a},
1:{B:b},
2:{C:c},
}
dans une structure comme celle-ci:
[
{0:{A:a}},
{1:{B:b}},
{2:{C:c}},
]
Utilisation de l'opérateur d'étalement comme ceci: [...data]
renvoie tout tableau vide.
J'ai aussi essayé [{...data}]
Existe-t-il un moyen d'utiliser l'opérateur d'étalement pour obtenir le résultat souhaité? Aussi, pourquoi cette approche ne fonctionne-t-elle pas?
Cela ne fonctionne pas car selon les documents MDN
"Les propriétés Rest/Spread pour la proposition ECMAScript (étape 3) ajoutent des propriétés réparties aux littéraux d'objet. Il copie les propres propriétés énumérables d'un objet fourni sur un nouvel objet . "
Vous pouvez faire ce que vous essayez de faire très facilement avec Object.keys().map()
.
var data = {
0:{A:"a"},
1:{B:"b"},
2:{C:"c"},
}
var result = Object.keys(data).map(function (key) {
return { [key]: data[key] };
});
console.log(result);
Vous pouvez utiliser Object.entries pour obtenir des paires [clé, valeur] et les mapper à un tableau d'objets en utilisant noms de propriété calculés :
const data = {
0:{A: 'a'},
1:{B: 'b'},
2:{C: 'c'}
};
const result = Object.entries(data).map(([key, value]) => ({ [key]: value }));
console.log(result);
Je crains que vous ne puissiez pas utiliser l'opérateur de propagation comme dans votre exemple, mais vous pouvez produire la sortie souhaitée avec reduce
.
data = {
0:{A:'a'},
1:{B:'b'},
2:{C:'c'},
}
let resArr = Object.keys(data).reduce((arr, e) => {
arr.Push({[e]: data[e]});
return arr;
}, []);
console.log(resArr);