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

176
Vistas
Cómo calcular la cantidad de artículos a partir de una matriz de objetos si el ID de artículo es el mismo y cómo resumir esas cantidades cuya fecha también es la misma

tengo datos en este formato

 const ChkdArr = [ { date: "2022-05-25", itemId: 29, quantity: 4, }, { date: "2022-05-26", itemId: 29, quantity: 2, }, { date: "2022-05-25", itemId: 36, quantity: 7, }, { date: "2022-05-25", itemId: 36, quantity: 4, }, { date: "2022-05-27", itemId: 36, quantity: 2, }, { date: "2022-05-28", itemId: 47, quantity: 1, }, ];

tengo problemas para obtener una nueva matriz con aquellos datos cuyo itemid es el mismo y en esos elementos, si la fecha es la misma, resuma su cantidad.

Quiero que el resultado se vea así. Estoy aplicando mapas y filtros, pero mis datos se repiten y tienen resultados incorrectos.

 const DateSortArr = [{ itemId: 29, date: [ { date: "2022-05-25", quantity: 4 }, { date: "2022-05-26", quantity: 2 }, ], }, { itemId: 36, date: [ { date: "2022-05-25", quantity: 11 }, { date: "2022-05-27", quantity: 2 }, ],}, { itemId: 47, date: [{ date: "2022-05-25", quantity: 1 }], }, ];
about 4 years ago · Juan Pablo Isaza
3 Respuestas
Responde la pregunta

0

Hola, no sé si te entendí, pero usas esta diversión:

 function groupBy(collection, property) { var i = 0, val, index, values = [], result = []; for (; i < collection.length; i++) { val = collection[i][property]; index = values.indexOf(val); if (index > -1) result[index].push(collection[i]); else { values.push(val); result.push([collection[i]]); } } return result; } const ChkdArr = [ { date: "2022-05-25", itemId: 29, quantity: 4, }, { date: "2022-05-26", itemId: 29, quantity: 2, }, { date: "2022-05-25", itemId: 36, quantity: 7, }, { date: "2022-05-25", itemId: 36, quantity: 4, }, { date: "2022-05-27", itemId: 36, quantity: 2, }, { date: "2022-05-28", itemId: 47, quantity: 1, }, ]; var obj = groupBy(ChkdArr, "date"); console.log(obj)
about 4 years ago · Juan Pablo Isaza Denunciar

0

const ChkdArr = [ { date: "2022-05-25", itemId: 29, quantity: 4, }, { date: "2022-05-26", itemId: 29, quantity: 2, }, { date: "2022-05-25", itemId: 36, quantity: 7, }, { date: "2022-05-25", itemId: 36, quantity: 4, }, { date: "2022-05-27", itemId: 36, quantity: 2, }, { date: "2022-05-28", itemId: 47, quantity: 1, }, ]; let answer = []; ChkdArr.map(item =>{ let id = answer.findIndex(it =>it.itemId === item.itemId); if(id === - 1 ){ answer.push({itemId: item.itemId, data: [{date: item.date, quantity: item.quantity}]}) }else{ answer [id] = {itemId: item.itemId, data: [...answer[id].data, {date: item.date, quantity: item.quantity}]} } }) console.log(answer)
about 4 years ago · Juan Pablo Isaza Denunciar

0

Esto se puede hacer de manera eficiente utilizando un mapa y una nueva matriz de salida. En el mapa, almacenaremos la clave como itemId y el valor como su índice en la matriz de salida. Luego, recorreremos los datos y veremos si el itemId tiene un índice en el mapa, si es así, buscaremos el valor del elemento en la matriz de salida y actualizaremos el valor de la fecha actual en consecuencia; de lo contrario, crearemos un nuevo objeto para ese elemento en la matriz. El siguiente código hace precisamente eso.

 const data = [ { date: "2022-05-25", itemId: 29, quantity: 4, }, { date: "2022-05-26", itemId: 29, quantity: 2, }, { date: "2022-05-25", itemId: 36, quantity: 7, }, { date: "2022-05-25", itemId: 36, quantity: 4, }, { date: "2022-05-27", itemId: 36, quantity: 2, }, { date: "2022-05-28", itemId: 47, quantity: 1, }, ]; let output = []; let itemIdToIndexMap = {}; data.forEach(item => { const itemIndex = itemIdToIndexMap[item.itemId]; if(itemIndex !== undefined) { const itemArray = output[itemIndex]; const itemWithCurrentDate = itemArray.date.find(newItem => item.date === newItem.date); if(itemWithCurrentDate) { itemWithCurrentDate.quantity += item.quantity; } else { itemArray.date.push({date: item.date, quantity: item.quantity}); } } else { output.push({itemId: item.itemId, date: [{date: item.date, quantity: item.quantity}]}); itemIdToIndexMap[item.itemId] = output.length - 1; } }); console.log(JSON.stringify(output));
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