Quiero que el resultado sume toda la quantity del mismo gato.
var data = [ { cat: 'EK-1',name:"test",info:"mat", quantity: 3}, { cat: 'EK-2', name:"test2",info:"nat"quantity: 1} ];Tengo una matriz de objetos que tienen algunos objetos similares. ¿Cómo agregar cantidad y crear un objeto único? Esto es lo que probé.
var data = [{ cat: 'EK-1', name: "test", info: "mat", quantity: 1 }, { cat: 'EK-1', name: "test", info: "mat", quantity: 1 }, { cat: 'EK-1', name: "test", info: "mat", quantity: 1 }, { cat: 'EK-2', name: "test2", info: "nat", quantity: 1 } ]; const products = Array.from(data.reduce((acc, { cat, quantity }) => acc.set(cat, (acc.get(cat) || 0) + quantity), new Map() ), ([cat, quantity]) => ({ cat, quantitya })); console.log(products);Puede obtener el objeto completo como valor para el mapa y aumentar la cantidad.
const data = [{ cat: 'EK-1', name: "test", info: "mat", quantity: 1 }, { cat: 'EK-1', name: "test", info: "mat", quantity: 1 }, { cat: 'EK-1', name: "test", info: "mat", quantity: 1 }, { cat: 'EK-2', name: "test2", info: "nat", quantity: 1 }], products = Array.from( data .reduce( (acc, o) => acc.set(o.cat, { ...o, quantity: (acc.get(o.cat)?.quantity || 0) + o.quantity }), new Map ) .values() ); console.log(products); .as-console-wrapper { max-height: 100% !important; top: 0; }Primero agrupa y suma cantidades bajo claves de categorías, usando reduce y luego descarta esas claves con Object.values .
var data = [{ cat: 'EK-1', name: "test", info: "mat", quantity: 1 }, { cat: 'EK-1', name: "test", info: "mat", quantity: 1 }, { cat: 'EK-1', name: "test", info: "mat", quantity: 1 }, { cat: 'EK-2', name: "test2", info: "nat", quantity: 1 }]; const result = Object.values(data.reduce((acc, item) => { if (!acc[item.cat]) { acc[item.cat] = item; } else { acc[item.cat] = { ...item, quantity: item.quantity + acc[item.cat].quantity } } return acc; }, {})) console.log(result)