Tengo una solución anterior que combinaba un conteo, basado en un solo valor coincidente dentro de una matriz de objetos:
P.EJ:
[ { "ui5": "sap.m.Bar", "count": 2 }, { "ui5": "sap.m.Bar", "count": 1 }, { "ui5": "sap.m.Panel", "count": 1 } ]Se convertirá:
[ { "ui5": "sap.m.Bar", "count": 3 }, { "ui5": "sap.m.Panel", "count": 1 } ]Con el código:
var r = {}; myArray.forEach(function (o) { r[o.ui5] = (r[o.ui5] || 0) + o.count; }) var outputArray = Object.keys(r).map(function (k) { return { ui5: k, count: r[k] } });Sin embargo, no estoy seguro de cómo comparar un objeto más detallado, ¡basado en dos valores coincidentes!
P.EJ:
[ { "ui5": "sap.m.Bar", "_sMutator": "setCustomHeader", "count": 2 }, { "ui5": "sap.m.Bar", "_sMutator": "addContent", "count": 1 }, { "ui5": "sap.m.Bar", "_sMutator": "setCustomFooter", "count": 3 }, { "ui5": "sap.m.Bar", "_sMutator": "setCustomFooter", "count": 1 } ]Se reducirá a la salida esperada:
[ { "ui5": "sap.m.Bar", "_sMutator": "setCustomHeader", "count": 2 }, { "ui5": "sap.m.Bar", "_sMutator": "addContent", "count": 1 }, { "ui5": "sap.m.Bar", "_sMutator": "setCustomFooter", "count": 4 } ]¿No creo que pueda expandir mi lógica original para dar cuenta de dos valores coincidentes? ¡Cualquier ayuda será bien recibida!
Puede tomar una matriz con claves deseadas para agrupar y usar esta matriz para obtener una clave unida para el grupo y para obtener un objeto si no se asigna ningún objeto a la propiedad del grupo.
const data = [{ ui5: "sap.m.Bar", _sMutator: "setCustomHeader", count: 2 }, { ui5: "sap.m.Bar", _sMutator: "addContent", count: 1 }, { ui5: "sap.m.Bar", _sMutator: "setCustomFooter", count: 3 }, { ui5: "sap.m.Bar", _sMutator: "setCustomFooter", count: 1 }], keys = ['ui5', '_sMutator'], result = Object.values(data .reduce((r, o) => { const key = keys.map(k => o[k]).join('|'); r[key] ??= { ...Object.fromEntries(keys.map(k => [k, o[k]])), count: 0 }; r[key].count += o.count; return r; }, {}) ); console.log(result); .as-console-wrapper { max-height: 100% !important; top: 0; }