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

168
Vistas
Tomar valores de matriz y agregar los resultados: obtener NaN

Estoy trabajando con una matriz en la que estoy tratando de obtener la suma total por día y luego devolver una matriz con tales resultados. Mi enfoque hasta ahora es incorrecto ya que NaN después de aplicar la suma. Estoy en un callejón sin salida y no estoy seguro de por qué. Puedo aplicar una lógica similar si quisiera obtener la suma total de todos los días, pero esto no funciona para la suma de cada día. ¿Cuál sería el enfoque correcto para lograr el siguiente resultado?

Formación

 var test = [{ statistics: [{ "date": "03-13-2022", "balance": 19.88, }, { "date": "03-13-2022", "balance": 12.99, }, { "date": "03-14-2022", "balance": 17.97, }, { "date": "03-14-2022", "balance": 19.64, }]}];

Actualmente esto está devolviendo NaN por la suma:

 let balance = []; for (let s = 0; s < test[0].statistics.length; s++) { console.log(test[0].statistics[s].date); balance[`${test[0].statistics[s].date}`] += test[0].statistics[s].balance; } //Returns : //[ '03-13-2022': NaN, '03-14-2022': NaN ]

Esto devuelve la suma total :/. quiero la suma total por dia

 let balance2 = 0; for (let s = 0; s < test[0].statistics.length; s++) { console.log(test[0].statistics[s].date); balance2 += test[0].statistics[s].balance2; } //70.48

Resultado deseado:

 [ { date: '03-13-2022', balance: 32.87 }, { date: '03-14-2022', balance: 37.61 } ]
about 4 years ago · Juan Pablo Isaza
3 Respuestas
Responde la pregunta

0

Debe establecer el valor predeterminado 0 para balance[test[0].statistics[s].date] si no está definido.

Porque un valor indefinido + un número = NaN

 if (!balance[test[0].statistics[s].date]) { balance[test[0].statistics[s].date] = 0 } 

 var test = [{ statistics: [{ "date": "03-13-2022", "balance": 19.88, }, { "date": "03-13-2022", "balance": 12.99, }, { "date": "03-14-2022", "balance": 17.97, }, { "date": "03-14-2022", "balance": 19.64, } ] }]; let balance = {}; for (let s = 0; s < test[0].statistics.length; s++) { if (!balance[test[0].statistics[s].date]) { balance[test[0].statistics[s].date] = 0 } balance[test[0].statistics[s].date] += test[0].statistics[s].balance; } console.log(balance)

about 4 years ago · Juan Pablo Isaza Denunciar

0

Aquí están mis códigos que devuelven lo mismo que el resultado deseado,

 var test = [{ statistics: [{ "date": "03-13-2022", "balance": 19.88, }, { "date": "03-13-2022", "balance": 12.99, }, { "date": "03-14-2022", "balance": 17.97, }, { "date": "03-14-2022", "balance": 19.64, }]}]; // Grouping all data according to respective dates const returnGroupedData = (arr)=>{ const data = {}; arr.forEach((ar) => { data[ar.date] = [...(data[ar.date] || []), {date: ar.date, balance: ar.balance}] }); return data; }; //Returning the sum const returnTheSum =(obj)=>{ return Object.keys(obj).map(item=>{ let balances = [...obj[item].map(arr=>arr.balance)] let sum = balances.reduce((total, num)=>{ return total + num }) return {date: item, balance: sum} }) } console.log(returnTheSum(returnGroupedData(test[0].statistics)));
about 4 years ago · Juan Pablo Isaza Denunciar

0

Puede usar Array#reduce() especialmente si tiene saldos para varias fechas en las que la salida es un objeto con las fechas como claves y los saldos totales como valores.

 const test = [{ statistics: [{"date": "03-13-2022","balance": 19.88},{"date": "03-13-2022","balance": 12.99},{"date": "03-14-2022","balance": 17.97},{"date": "03-14-2022","balance": 19.64},{"date": "03-14-2022","balance": 29.88},{"date": "03-14-2022","balance": 6.99},{"date": "03-15-2022","balance": 1.97},{"date": "03-15-2022","balance": 39.64}]}]; const totals = test[0].statistics.reduce( (prev, {date,balance}) => ({...prev,[date]:(prev[date] || 0) + balance}), {} ); console.log( totals ); /* OUTPUT { "03-13-2022": 32.87, "03-14-2022": 74.47999999999999, "03-15-2022": 41.61 } */ //To convert to your desired output use: const desired = Object.entries( totals ).map( ([date,balance]) => ({date,balance}) ); console.log( desired ); /* OUTPUT [ { "date": "03-13-2022", "balance": 32.87 }, { "date": "03-14-2022", "balance": 74.47999999999999 }, { "date": "03-15-2022", "balance": 41.61 } ] */

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