Necesito ayuda para agrupar y sumar un doble par de números aunque el orden sea diferente, lo importante es que esos dobles pares de números son iguales, tengo este código con js y unserscorejs pero no sé cómo comprobar si hay un emparejar con los mismos números en diferente orden:
Ejemplo lógico:
02 00(1.67$) -- > +1.67$ 02 03(1.67$) 02 00(1.67$) -- > + 1.67$ 00 03(1.67$) -- > +1.67$ 00 00(1.67$) 03 00(1.67$) -- > +1.67$Resultado deseado:
02 00(3.33$) --> 02 00 + 02 00 02 03(1.67$) 00 03(3.33$) --> 00 03 + 03 00 00 00(1.67$)Mi código:
let pairs = [{pair: '02 00',money: 1.67},{pair: '02 03',money: 1.67},{pair: '02 00',money: 1.67},{pair: '00 03',money: 1.67},{pair: '00 00',money: 1.67},{pair: '03 00',money: 1.67}] var groups = _.groupBy(pairs, 'pair'); const result = _.map(groups, (value: any, key: any) =>{ return { pair: key, money: _.reduce(value, (total: any, o: { money: any; }) =>{ return total + o.money; }, 0) }; }); //output //[{pair: '02 00',money: 3.33},{pair: '02 03',money: 1.67},{pair: '00 03',money: 1.67},{pair: '00 00',money: 1.67},{pair: '03 00',money: 1.67}] //expected output //[{pair: '02 00',money: 3.33},{pair: '02 03',money: 1.67},{pair: '00 03',money: 3.33},{pair: '00 00',money: 1.67}]para lidiar con esto, solo necesita hacer un poco de manipulación de cadenas para comparar los pares. Publicaré el código y luego lo revisaré paso a paso.
let pairs = [ { pair: '02 00', money: 1.67 }, { pair: '02 03', money: 1.67 }, { pair: '02 00', money: 1.67 }, { pair: '00 03', money: 1.67 }, { pair: '00 00', money: 1.67 }, { pair: '03 00', money: 1.67 } ] const groupAndSum = (array) => { return Object.entries( array.reduce((acc, el) => { if (el.pair in acc) { acc[el.pair] += el.money } else { const key = el.pair.split(' ').reverse().join(' ') if (key in acc) acc[key] += el.money else acc[el.pair] = el.money } return acc }, {}) ) .map(([pair, money]) => ({ pair, money })) } console.log(groupAndSum(pairs)) .as-console-wrapper { position: absolute; top: 0; min-height: 100vh; }Vamos de adentro hacia afuera.
{ '02 00': 3.34, '02 03': 1.67, '00 03': 3.34, '00 00': 1.67 }Obtenemos esto revisando los objetos en la matriz de pares 1 por 1. Verificamos si existe un cierto par en el objeto acumulador.
[ [ '02 00', 3.34 ], [ '02 03', 1.67 ], [ '00 03', 3.34 ], [ '00 00', 1.67 ] ] [ { pair: '02 00', money: 3.34 }, { pair: '02 03', money: 1.67 }, { pair: '00 03', money: 3.34 }, { pair: '00 00', money: 1.67 } ]