Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

90
Visualizações
Totalización de la matriz de valores de objetos usando reducer sin usar find

Estoy reduciendo la matriz de data a una entrada por DishName con los valores Qty, Cooked y NotCooked agregados si los DishNames son los mismos.

Lo que tengo funciona, sin embargo, debido a la necesidad de compatibilidad con dispositivos antiguos, no puedo usar .find() con "flechas gruesas". He intentado devanarme los sesos pero no puedo encontrar una solución.

 var data = [ { DishName: '35. Chicken Vindaloo', Qty: 1, Cooked: 1, NotCooked: 0 }, { DishName: '36. Lamb Vindaloo', Qty: 1, Cooked: 1, NotCooked: 0 }, { DishName: '37. Prawn Vindaloo', Qty: 1, Cooked: 1, NotCooked: 0 }, { DishName: '38. King Prawn Vindaloo', Qty: 1, Cooked: 1, NotCooked: 0 }, { DishName: '35. Chicken Vindaloo', Qty: 1, Cooked: 0, NotCooked: 1 }, { DishName: '36. Lamb Vindaloo', Qty: 1, Cooked: 0, NotCooked: 1 }, { DishName: '37. Prawn Vindaloo', Qty: 1, Cooked: 0, NotCooked: 1 }, { DishName: 'Chicken Tikka Vindaloo', Qty: 1, Cooked: 0, NotCooked: 1 }, ]; var res = data.reduce(function(acc, obj) { var existItem = acc.find(item => item.DishName === obj.DishName); if (existItem) { existItem.Qty += obj.Qty; existItem.Cooked += obj.Cooked; existItem.NotCooked += obj.NotCooked; return acc; } acc.push(obj); return acc; }, []); console.log(res);

about 4 years ago · Juan Pablo Isaza
3 Respostas
Responde à pergunta

0

La var existItem = acc.find(item => item.DishName === obj.DishName); se puede reescribir sin función de flecha como

 var existItem = acc.find(function(item){return item.DishName === obj.DishName;});

O si quiere evitar usar find como

 var existItem = acc.filter(function(item){return item.DishName === obj.DishName;})[0];

Pero también cambiaría acc.push(obj); a acc.push({...obj}); para evitar mutar la matriz data original.

about 4 years ago · Juan Pablo Isaza Relatório

0

Las funciones de flecha son ligeramente diferentes a las funciones regulares pero son muy similares. En su caso, puede usar find con una función regular.

 var data = [ {DishName: '35. Chicken Vindaloo', Qty: 1, Cooked: 1, NotCooked: 0}, {DishName: '36. Lamb Vindaloo', Qty: 1, Cooked: 1, NotCooked: 0}, {DishName: '37. Prawn Vindaloo', Qty: 1, Cooked: 1, NotCooked: 0}, {DishName: '38. King Prawn Vindaloo', Qty: 1, Cooked: 1, NotCooked: 0}, {DishName: '35. Chicken Vindaloo', Qty: 1, Cooked: 0, NotCooked: 1}, {DishName: '36. Lamb Vindaloo', Qty: 1, Cooked: 0, NotCooked: 1}, {DishName: '37. Prawn Vindaloo', Qty: 1, Cooked: 0, NotCooked: 1}, {DishName: 'Chicken Tikka Vindaloo', Qty: 1, Cooked: 0, NotCooked: 1}, ] var res = data.reduce(function(acc, obj) { var existItem = acc.find(function(item){return item.DishName === obj.DishName}); if (existItem) { existItem.Qty += obj.Qty; existItem.Cooked += obj.Cooked; existItem.NotCooked += obj.NotCooked; return acc; } acc.push(obj); return acc; }, []); console.log(res);

about 4 years ago · Juan Pablo Isaza Relatório

0

Un enfoque sin find tiene la ventaja adicional de ahorrar para cada paso de un ciclo de reduce completo la iteración de find innecesaria.

Una solución basada en un acumulador que se encarga de mapear y recopilar elementos de plato no fusionados ejecuta un solo ciclo de reduce .

 function mergeSameDish(collector, item) { var index = collector.index; var list = collector.list; var merger = index[item.DishName]; if (merger) { // a (to be) merged dish item. merger.Qty = merger.Qty + item.Qty; merger.Cooked = merger.Cooked + item.Cooked; merger.NotCooked = merger.NotCooked + item.NotCooked; } else { // collect and map a shallow dish item copy // in order to not later mutate the original. list.push( index[item.DishName] = Object.assign({}, item) ); } return collector; } var data = [ { DishName: '35. Chicken Vindaloo', Qty: 1, Cooked: 1, NotCooked: 0 }, { DishName: '36. Lamb Vindaloo', Qty: 1, Cooked: 1, NotCooked: 0 }, { DishName: '37. Prawn Vindaloo', Qty: 1, Cooked: 1, NotCooked: 0 }, { DishName: '38. King Prawn Vindaloo', Qty: 1, Cooked: 1, NotCooked: 0 }, { DishName: '35. Chicken Vindaloo', Qty: 1, Cooked: 0, NotCooked: 1 }, { DishName: '36. Lamb Vindaloo', Qty: 1, Cooked: 0, NotCooked: 1 }, { DishName: '37. Prawn Vindaloo', Qty: 1, Cooked: 0, NotCooked: 1 }, { DishName: 'Chicken Tikka Vindaloo', Qty: 1, Cooked: 0, NotCooked: 1 }, ]; console.log( 'mutated/reduced items ...', data.reduce(mergeSameDish, { index: {}, list: [], }).list ); console.log('unchanged/original items ... ', data);
 .as-console-wrapper { min-height: 100%!important; top: 0; }

about 4 years ago · Juan Pablo Isaza Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda