J'ai un tableau d'objets qui ressemble à ceci: J'essaie de le convertir en quelque chose comme ceci: p> J'ai essayé le suivant p> et cela fonctionne bien, mais cela suppose que vous connaissez déjà, à l'avance, les touches des objets que vous convertissez. P> < p> Je veux pouvoir charger de manière dynamique des clés d'objet et des valeurs correspondantes. En supposant que je ne sais pas que les objets de notre exemple de tableau ont "nom" et "Âge" comme des clés. P> P>
6 Réponses :
Vous pouvez réduire le tableau et les entrées de l'objet et collecter les valeurs dans le groupe des touches.
p>
.as-console-wrapper { max-height: 100% !important; top: 0; }Vous pouvez obtenir la clé du premier élément, puis sur la carte. Avec chacun, obtenez ses valeurs correspondantes
p>
const arr = [
{ name: "john", age: 23, gender: "male" },
{ name: "mary", age: 40, gender: "female" },
{ name: "zack", age: 17, gender: "male" },
]
const res = Object.keys(arr[0]).reduce((acc, el) => {
const values = arr.map((item) => item[el])
return { ...acc, [el]: values }
}, {})
console.log(res)
Une seule chose avec cette approche est comme, pour une raison quelconque si le premier objet ne présente pas certaines des clés (par exemple, considérer sexe code> n'est pas présent dans arr [0] code>), il pourrait ne pas être présent dans la sortie du tout.
En supposant que chaque objet de votre liste ait les mêmes clés que vous pouvez obtenir les touches du premier objet puis plantez les touches avec votre approche ci-dessus P> const returnObj = {}
keys.forEach(key => {
returnObj[key] = arr.map(item => item[key])
})
return returnObj
Vous pouvez utiliser p> objet.entries code> pour le mappage. var arr = [
{name: "john", age: 23},
{name: "mary", age: 40},
{name: "zack", age: 17}
];
var entries = arr.map((item) => Object.entries(item));
var result = {};
entries.forEach(entry => {
entry.forEach(item => {
if (result[item[0]] && result[item[0]].length > 0) {
result[item[0]].push(item[1]);
} else {
result[item[0]] = [item[1]];
}
});
});
console.log(result);
Vous pouvez utiliser p> array.reduce code> et objet.keys code>. let arr = [
{name: "john", age: 23},
{name: "mary", age: 40},
{name: "zack", age: 17}
]
const formatData = (data) => {
return data.reduce((res, obj) => {
Object.keys(obj).map(d => {
res[d] = [...(res[d] ||[]), obj[d]]
})
return res;
}, {})
}
console.log(formatData(arr))
Vous pouvez le faire avec RAMDA
import { mergeWith, concat } from âRamdaâ
const mergeConcat = mergeWith(concat)
mergeConcat(arr)