Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

170
Vistas
Reducir una matriz al verificar/establecer valores

Tengo algunos datos que deben transformarse en una matriz, uno por uno.
Estos son los datos de ejemplo (puede haber muchos más escuadrones):

 var my_arr = []; var squad1 = [ { date: "2022-04-04", number_of_checkable_cells: 2 }, { date: "2022-04-05", number_of_checkable_cells: 2 } ]; var squad2 = [ { date: "2022-04-04", number_of_checkable_cells: 2 }, { date: "2022-04-05", number_of_checkable_cells: 1 }, { date: "2022-04-06", number_of_checkable_cells: 2 } ];

Qué sucede: my_arr recibe escuadrón1 para agregarlo, luego escuadrón2 se une a la fiesta.
Entonces, después de agregar escuadrón1, my_arr debería ser:

 my_arr = [ { date: "2022-04-04", number_of_checkable_cells: 2 }, { date: "2022-04-05", number_of_checkable_cells: 2 } ];

Luego se reciben los datos del escuadrón2 y quiero el siguiente resultado:

 my_arr = [ { date: '2022-04-04', number_of_checkable_cells: 4 }, { date: '2022-04-05', number_of_checkable_cells: 3 }, { date: '2022-04-06', number_of_checkable_cells: 2 } ]

El código que tengo:

 function reduce_it(arr) { return arr.reduce((initiator, curr) => { var obj = initiator.find((i) => i.date == curr.date); if (obj) obj.number_of_checkable_cells += curr.number_of_checkable_cells; else initiator.push(curr); return initiator; }, []); } my_arr = [...my_arr, ...squad1]; my_arr = reduce_it(my_arr); my_arr = [...my_arr, ...squad2]; my_arr = reduce_it(my_arr);

¿Hay una mejor manera de llegar al mismo resultado? Si hay, por favor guíame. :)

about 4 years ago · Juan Pablo Isaza
2 Respuestas
Responde la pregunta

0

Mantendría la matriz de destino y la mutaría.

 function add(target, source) { return source.reduce((t, o) => { const item = t.find(({ date }) => date == o.date); if (item) item.number_of_checkable_cells += o.number_of_checkable_cells; else t.push({ ...o }); return t; }, target); } const squad1 = [{ date: "2022-04-04", number_of_checkable_cells: 2 }, { date: "2022-04-05", number_of_checkable_cells: 2 }], squad2 = [{ date: "2022-04-04", number_of_checkable_cells: 2 }, { date: "2022-04-05", number_of_checkable_cells: 1 }, { date: "2022-04-06", number_of_checkable_cells: 2 }], my_arr = []; add(my_arr, squad1); console.log(my_arr); add(my_arr, squad2); console.log(my_arr);

about 4 years ago · Juan Pablo Isaza Denunciar

0

Lo que sugieres funciona, pero esto es lo que te sugiero que hagas. Básicamente, cada vez que llega un nuevo escuadrón, puede recorrerlo y actualizar su conjunto de escuadrones de la siguiente manera:

 var my_arr = []; var squad1 = [ { date: "2022-04-04", number_of_checkable_cells: 2 }, { date: "2022-04-05", number_of_checkable_cells: 2 } ]; my_arr.push(...squad1); // Here you received the squad 2 var squad2 = [ { date: "2022-04-04", number_of_checkable_cells: 2 }, { date: "2022-04-05", number_of_checkable_cells: 1 }, { date: "2022-04-06", number_of_checkable_cells: 2 } ]; for (const squad of squad2) { const existingSquad = my_arr.find( (prevSquad) => prevSquad.date === squad.date ); if (existingSquad) { existingSquad.number_of_checkable_cells += squad.number_of_checkable_cells; } else { my_arr.push(squad); } } console.log(my_arr); /* (3) [{…}, {…}, {…}] 0: {date: '2022-04-04', number_of_checkable_cells: 4} 1: {date: '2022-04-05', number_of_checkable_cells: 3} 2: {date: '2022-04-06', number_of_checkable_cells: 2} length: 3 */

Entonces, este ejemplo es el original, si desea envolverlo en un método, mire a continuación:

 function updateSquads(squads, newSquads) { for (const squad of newSquads) { const existingSquad = squads.find( (prevSquad) => prevSquad.date === squad.date ); if (existingSquad) { existingSquad.number_of_checkable_cells += squad.number_of_checkable_cells; } else { squads.push(squad); } } } var my_arr = []; var squad1 = [ { date: "2022-04-04", number_of_checkable_cells: 2 }, { date: "2022-04-05", number_of_checkable_cells: 2 } ]; my_arr.push(...squad1); // Here you receive squad 2 var squad2 = [ { date: "2022-04-04", number_of_checkable_cells: 2 }, { date: "2022-04-05", number_of_checkable_cells: 1 }, { date: "2022-04-06", number_of_checkable_cells: 2 } ]; updateSquads(my_arr, squad2) console.log(my_arr); /* (3) [{…}, {…}, {…}] 0: {date: '2022-04-04', number_of_checkable_cells: 4} 1: {date: '2022-04-05', number_of_checkable_cells: 3} 2: {date: '2022-04-06', number_of_checkable_cells: 2} length: 3 */
about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda