J'essaie de convertir un tableau qui contient des objets en un seul objet où la clé est "page" et la valeur est "has_access". Je pourrais donc y accéder plus tard avec has_access.about par exemple.
Y a-t-il une seule ligne de code qui pourrait y parvenir?
J'ai essayé mais cela me rend le tableau d'origine.
has_access: {
home: 1
about: 0
profile: 1
}
Voici le tableau source que je voudrais convertir
[
{
"id": 215,
"page": "home",
"has_access": 1,
},
{
"id": 216,
"page": "about",
"has_access": 0,
},
{
"id": 217,
"page": "profile",
"has_access": 1,
}
]
Résultat souhaité:
var myData = Object.keys(data).map(key => {
return data[key];
})
4 Réponses :
Ceci peut être réalisé avec la méthode reduction () , via ce qui suit:
const array = [
{
"id": 215,
"page": "home",
"has_access": 1,
},
{
"id": 216,
"page": "about",
"has_access": 0,
},
{
"id": 217,
"page": "profile",
"has_access": 1,
}
];
const result = array.reduce((acc, i) => ({ ...acc, [ i.page ] : i.has_access }), {});
console.log(result);
Vous pouvez obtenir l'objet résultant en utilisant .reduce () :
const data = [
{"id": 215, "page": "home", "has_access": 1},
{"id": 216, "page": "about", "has_access": 0},
{"id": 217, "page": "profile", "has_access": 1}
];
const has_access = data.reduce((r, c) => (r[c.page] = c.has_access, r), {});
console.log(has_access);
Vous pouvez utiliser réduire pour parcourir l'objet et utiliser Object.assign pour mettre à jour l'accumulateur,
var data = [{"id":215,"page":"home","has_access":1},{"id":216,"page":"about","has_access":0},{"id":217,"page":"profile","has_access":1}];
var result = data.reduce((c, v) => Object.assign(c, {[v.page]: v.has_access}), {});
console.log(result);
C'est facile - spécifiez la clé et la valeur, puis utilisez map et reduce:
const a = [{
"id": 215,
"page": "home",
"has_access": 1
},
{
"id": 216,
"page": "about",
"has_access": 0
},
{
"id": 217,
"page": "profile",
"has_access": 1
}
];
const value = "has_access";
const key = "page";
const res = {
[value]: a.map(o => [o[key], o[value]]).reduce((acc, [k, v]) => ({ ...acc, [k]: v }), {})
}
console.log(res);