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

97
Vistas
Establezca cero para datos faltantes en una matriz de objetos

Tengo las siguientes matrices de objetos, por ejemplo:

 const data = [ { date: '01-01', products: [ { id: 1, value: 6, label: 'Product 1' }, { id: 2, value: 3, label: 'Product 2' } ] }, { date: '02-01', products: [ { id: 1, value: 4, label: 'Product 1' }, ] }, { date: '03-01', products: [ { id: 1, value: 11, label: 'Product 1' }, { id: 2, value: 15, label: 'Product 2' } ] } ]

Luego hago la agrupación y obtengo el siguiente resultado:

 const output = [ { id: 1, name: 'Product 1', data: [6, 4, 11] }, { id: 2, name: 'Product 2', data: [3, 15] } ]

El problema con la solución es que no puedo tener en cuenta el valor faltante (el objeto con la fecha "02-01" no tiene un objeto con id: 2). Necesito verificar que el objeto no existe y sustituir cero en lugar del valor faltante. ¿Quizás sabes cómo hacerlo?

Código de solución a continuación:

 const result = data.map(e => e.products).flat().reduce((acc, product) => { const index = acc.findIndex(item => item.id === product.id); if(index === -1) { acc.push({ id: product.id, name: product.label, data: [product.value] }) return acc; } const findIndex = acc[index].data.findIndex((innerNode) => innerNode.id === product.id); if (findIndex === -1) { console.log(product.value) acc[index].data.push(product.value); return acc; } return acc; }, []);

Resultado Esperado:

 const output = [ { id: 1, name: 'Product 1', data: [6, 4, 11] }, { id: 2, name: 'Product 2', data: [3, 0, 15] } ]
about 4 years ago · Juan Pablo Isaza
1 Respuestas
Responde la pregunta

0

Puedes hacer esto en tres pases:

  • primero, encuentras todas las fechas. Cuando encuentre un producto por primera vez, establecerá todos sus valores en 0 para cada una de esas fechas.
  • luego, itera los productos y se asegura de que, para cada fecha, tengan un valor, que será cero de forma predeterminada.
  • finalmente, formatea la salida.

 const data = [ { date: '01-01', products: [ { id: 1, value: 6, label: 'Product 1' }, { id: 2, value: 3, label: 'Product 2' } ] }, { date: '02-01', products: [ { id: 1, value: 4, label: 'Product 1' }, ] }, { date: '03-01', products: [ { id: 1, value: 11, label: 'Product 1' }, { id: 2, value: 15, label: 'Product 2' } ] } ] // goal is to fill this for each product let dateToValues = data.map(d => [d.date, 0]); // build map of product-id to values-for-each-date let products = new Map(); data.forEach(d => d.products.forEach(p => { let values = products.get(p.id)?.data; if (values === undefined) { values = new Map(dateToValues); // a copy products.set(p.id, {label: p.label, data: values}); } values.set(d.date, p.value); })) // generate output, skipping dates and only showing their values let output = []; products.forEach((v, id) => output.push({ id: id, name: v.label, data: [... v.data.values()]})); console.log(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