Tengo un objeto dado para iterar y crear otro objeto en el siguiente formato (newObj) Objeto dado:
let obj = [ {a: 1, b: 232}, {a: 1, b: 2}, {a: 1, b: 256}, {a: 2, b: 3}, {a: 2, b: 3343}, {a: 3, b: 4} ];Objeto esperado:
newObj = { 1: [{a: 1, b: 232}, {a: 1, b: 2}, {a: 1, b: 256}], 2: [{a: 2, b: 3}], 3: [{a: 3, b: 4}] }Código:
let newObj = {}; obj.forEach(element => { if (newObj[element.a]) { let key = element.a; newObj[key] = newObj[key].push(element); } newObj[element.a] = [element]; }); console.log(newObj);Creamos un objeto de result , recorremos cada objeto en la matriz obj , si no tenemos el objeto a clave en el objeto de resultado, lo agregamos ( a: [] ), y luego empujamos todo el objeto a result[a] matriz
let obj = [ {a: 1, b: 232}, {a: 1, b: 2}, {a: 1, b: 256}, {a: 2, b: 3}, {a: 2, b: 3343}, {a: 3, b: 4} ]; let result = {}; for(const {a, b} of obj) { if(!result[a]) result[a] = [] result[a].push({a, b}) } console.log(result)Para abordar su fragmento de código actualizado, solo necesita crear una nueva matriz para una clave determinada si la clave no existe.
let obj = [ { a: 1, b: 232 }, { a: 1, b: 2 }, { a: 1, b: 256 }, { a: 2, b: 3 }, { a: 2, b: 3343 }, { a: 3, b: 4 } ]; let newObj = {}; obj.forEach(element => { let key = element.a; if (!newObj[key]) { newObj[key] = []; // Only initialize if undefined/null } newObj[key].push(element); // Always push }); console.log(newObj); .as-console-wrapper { top: 0; max-height: 100% !important; } Un enfoque más moderno sería simplemente agruparlos por la tecla a mediante la reducción y la distribución.
const obj = [ { a: 1, b: 232 }, { a: 1, b: 2 }, { a: 1, b: 256 }, { a: 2, b: 3 }, { a: 2, b: 3343 }, { a: 3, b: 4 } ]; const newObj = obj.reduce((acc, o) => ({ ...acc, [oa]: [...(acc[oa] ?? []), o] }), {}); console.log(newObj); .as-console-wrapper { top: 0; max-height: 100% !important; }puedes usar reducir para eso
let obj = [ {a: 1, b: 232}, {a: 1, b: 2}, {a: 1, b: 256}, {a: 2, b: 3}, {a: 2, b: 3343}, {a: 3, b: 4} ]; const newObj = obj.reduce((res, {a, b}) => { return { ...res, [a] : [...(res[a] || []), {a, b}] } }, {}) console.log(newObj)