Je veux créer un objet à partir d'une liste de tableau. J'ai un tableau dynamique qui suppose de ressembler à ceci:
var dynamicArray = ["2007", "2008", "2009", "2010"];
et avec un peu de javascript es6, je veux créer un objet comme celui-ci:
const obj = {
2007: {
x: width / 5,
y: height / 2
},
2008: {
x: (2 / 5) * width,
y: height / 2
},
2009: {
x: (3 / 5) * width,
y: height / 2
},
2010: {
x: (4 / 5) * width,
y: height / 2
}
}
ne vous inquiétez pas des objets intérieurs mais je voulais juste une structure de marque comme celle-ci:
obj = {
2007: ...,
2008: ...,
...
}
S'il vous plaît aider, merci.
Simplement
const obj = {};
for (const key of yourArray) {
obj[key] = whatever;
}
ou si vous préférez le style "fonctionnel":
const obj = yourArray.reduce((o, key) => Object.assign(o, {[key]: whatever}), {});
en utilisant l'opérateur de propagation d'objet moderne:
const obj = yourArray.reduce((o, key) => ({ ...o, [key]: whatever}), {})
Exemple:
[
{ id: 10, color: "red" },
{ id: 20, color: "blue" },
{ id: 30, color: "green" }
].reduce((acc, cur) => ({ ...acc, [cur.color]: cur.id }), {})
Sortie:
{red: 10, blue: 20, green: 30}
Voici comment cela fonctionne:
reduce
est initialisé avec un objet vide (vide {}
à la fin), les premières variables d'itération sont donc acc = {}
cur = { id: 10, color: "red" }
. La fonction retourne un objet - c'est pourquoi le corps de la fonction est entouré de parenthèses => ({ ... })
. L'opérateur Spread ne fait rien à la première itération, donc red: 10
Est défini comme premier élément.
Sur la deuxième itération, les variables sont acc = { red: 10 }
cur = { id: 20, color: "blue" }
. Ici, l'opérateur de propagation développeacc
et la fonction renvoie { red: 10, blue: 20 }
.
Troisième itération acc = { red: 10, blue: 20 }
cur = { id: 30, color: "green" }
, Donc lorsque acc
est étendu à l'intérieur de l'objet, notre fonction renvoie la valeur finale.
en js avec es6 réduire la fonction pour tableau je le fais comme ça
let x = [1,2,3]
let y = x.reduce((acc, elem) => {
acc[elem] = elem // or what ever object you want inside
return acc
}, {})
console.log(y) // {1:1, 2:2, 3:3}