javascript - objetos - Crear objeto desde la matriz
objeto window javascript ejemplos (3)
Quiero crear un objeto de la lista de la matriz. Tengo una matriz que es dinámica que se supone que se vería así:
var dynamicArray = ["2007", "2008", "2009", "2010"];
y con algunos javascript es6 quiero hacer un objeto como este:
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
}
}
no te preocupes por los objetos internos, solo quería crear una estructura como esta:
obj = {
2007: ...,
2008: ...,
...
}
Por favor ayuda, gracias.
Simplemente
const obj = {};
for (const key of yourArray) {
obj[key] = whatever;
}
O si prefieres el estilo "funcional":
const obj = yourArray.reduce((o, key) => Object.assign(o, {[key]: whatever}), {});
utilizando el operador moderno de propagación de objetos:
const obj = yourArray.reduce((o, key) => ({ ...o, [key]: whatever}), {})
Ejemplo:
[
{ id: 10, color: "red" },
{ id: 20, color: "blue" },
{ id: 30, color: "green" }
].reduce((acc, cur) => ({ ...acc, [cur.color]: cur.id }), {})
Salida:
{red: 10, blue: 20, green: 30}
Así es como funciona:
reduce
se inicializa con un objeto vacío (vacío {}
al final), por lo tanto, las primeras variables de iteración son acc = {}
cur = { id: 10, color: "red" }
. La función devuelve un objeto: esta es la razón por la que el cuerpo de la función está entre paréntesis => ({ ... })
. El operador de propagación no hace nada en la primera iteración, por lo que red: 10
se establece como primer elemento.
En la segunda iteración las variables son acc = { red: 10 }
cur = { id: 20, color: "blue" }
. Aquí el operador de expansión expande acc
y la función devuelve { red: 10, blue: 20 }
.
Tercera iteración acc = { red: 10, blue: 20 }
cur = { id: 30, color: "green" }
, por lo que cuando acc
se extiende dentro del objeto, nuestra función devuelve el valor final.
en js con es6 reducir la función para la matriz lo hago así
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}