Tengo una matriz principal -
const arr = [ { description: 'Senior', amount: 50 }, { description: 'Senior', amount: 50 }, { description: 'Adult', amount: 75 }, { description: 'Adult', amount: 35 }, { description: 'Infant', amount: 25 }, { description: 'Senior', amount: 150 } ]Quiero ayuda con una operación es6 que agregará la cantidad según la clave (descripción) y eliminará los duplicados.
La matriz de resultados se verá algo así:
const newArr = [ { description: 'Senior', amount: 120 }, { description: 'Adult', amount: 110 }, { description: 'Infant', amount: 25 }, { description: 'Senior', amount: 150 } ]He estado usando el operador de reducción para lograr esto usando las soluciones de abajo, pero eso también elimina los objetos no consecutivos.
Sería muy útil si alguien me puede ayudar con algunos operadores de es6 para realizar la misma operación.
const arr = [ { description: "Senior", amount: 50 }, { description: "Senior", amount: 50 }, { description: "Adult", amount: 75 }, { description: "Adult", amount: 35 }, { description: "Infant", amount: 25 }, ]; const result = Object.values( arr.reduce((acc, item) => { acc[item.description] = acc[item.description] ? { ...item, amount: item.amount + acc[item.description].amount } : item; return acc; }, {}) ); console.log(result);Array#reduce , itere sobre la matriz mientras actualiza un Map donde la clave es la description y el valor es el registro con la amount totalMap#values , obtenga la lista de objetos agrupados const arr = [ { description: 'Senior', amount: 50 }, { description: 'Senior', amount: 50 }, { description: 'Adult', amount: 75 }, { description: 'Adult', amount: 35 }, { description: 'Infant', amount: 25 } ]; const res = [... arr.reduce((map, current) => { const { description } = current; const grouped = map.get(description); if(!grouped) { map.set(description, { ...current }); } else { map.set(description, { ...grouped, amount: grouped.amount + current.amount }) } return map; }, new Map) .values() ]; console.log(res);Puedes usar este fragmento
array.filter((item, index) => array.indexOf(item) === index);Consulte este enlace para obtener más detalles. O simplemente copie esta solución .