Necesito encontrar los elementos con la misma identificación en la matriz a continuación, agregar sus cantidades y escribirlas en una sola línea.
let arr = [ { itemId: 123, name: '0', quantity: 2 }, { itemId: 1, name: '1', quantity: 2 }, { itemId: 13, name: '2', quantity: 2 }, { itemId: 13, name: '3', quantity: 2 }, { itemId: 13, name: '4', quantity: 24 }, { itemId: 13, name: '5', quantity: 2 }, { itemId: 1, name: '6', quantity: 4 }, { itemId: 1, name: '7', quantity: 2 },];Quiero una salida como esta:
[{ itemId: 123, name: '1', quantity: 2 }, { itemId: 1, name: '2', quantity: 6 }, { itemId: 13, name: '6', quantity: 30 }];Y mi código:
const getPureList = () => { for (let index = 0; index < arr.length; index++) { for (let a = index + 1; a < arr.length; a++) { if (arr[index].itemId === arr[a].itemId) { arr[index].quantity += arr[a].quantity; arr.splice(a, 1); } } } return arr; };Gracias por tu ayuda.
Al mantener el name del primer objeto del grupo, puede tomar un objeto para agrupar y tomar los valores como resultado.
const array = [{ itemId: 123, name: '0', quantity: 2 }, { itemId: 1, name: '1', quantity: 2 }, { itemId: 13, name: '2', quantity: 2 }, { itemId: 13, name: '3', quantity: 2 }, { itemId: 13, name: '4', quantity: 24 }, { itemId: 13, name: '5', quantity: 2 }, { itemId: 1, name: '6', quantity: 4 }, { itemId: 1, name: '7', quantity: 2 }], result = Object.values(array.reduce((r, o) => { r[o.itemId] ??= { ...o, quantity: 0 }; r[o.itemId].quantity += o.quantity; return r; }, {})); console.log(result); .as-console-wrapper { max-height: 100% !important; top: 0; }