Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

109
Views
Suma de valores en objeto javascript

tengo el siguiente objeto javascript

 const reizen = { personen: [ { naam: "Bob", reizen: [ { locatie: "Frankrijk", uitgaven: [ { voorwerp: "Sokken", prijs: 15 }, { voorwerp: "Sleutelhanger", prijs: 6 }, { voorwerp: "Restaurant", prijs: 26 }, ] }, { locatie: "Duitsland", uitgaven: [ { voorwerp: "Taxi", prijs: 30 }, ] } ] }, ] }

Estoy tratando de obtener la suma de todos los valores donde dice 'prijs' (está en holandés) ¿Hay una manera 'fácil' de hacer esto?

EDITAR: ¡Gracias a todos por las increíbles respuestas! Lo hice funcionar gracias a ustedes.

about 4 years ago · Juan Pablo Isaza
3 answers
Answer question

0

No es totalmente sexy, y en realidad no haría esto, pero para dar una alternativa a los mapas/reducciones, etc., especialmente si la estructura del objeto es variable o desconocida, la forma más sencilla de obtener el recuento total sin recurrencia es encadenar el objeto. (JSON.stringify), dividir en "prijs" para dar una matriz de cadenas que comienzan con los números de destino y luego (ignorando el primer elemento que no contiene ningún valor de destino), parseFloat las cadenas (que analizarán los caracteres enteros hasta el primer carácter no entero) para obtener los números y sumar.

 const reizen = { personen: [ { naam: "Bob", reizen: [ { locatie: "Frankrijk", uitgaven: [ { voorwerp: "Sokken", prijs: 15 }, { voorwerp: "Sleutelhanger", prijs: 6 }, { voorwerp: "Restaurant", prijs: 26 }, ] }, { locatie: "Duitsland", uitgaven: [ { voorwerp: "Taxi", prijs: 30 }, ] } ] }, ] } const stringifiedObj = JSON.stringify(reizen); const portions = stringifiedObj.split('prijs\":'); let count = 0; for(let i = 1; i < portions.length; i++) { count += parseFloat(portions[i]) } console.log(count) // gives 77 (15 + 6 + 26 + 30)

about 4 years ago · Juan Pablo Isaza Report

0

al nivel de reizen (segundo)

 function getTotalPrijs(reizen_){ // var reizen_ = reizen.personen[0].reizen; let _prijs = 0 reizen_.map((item, index)=>{ const uitgaven = item.uitgaven; uitgaven.map(itm => typeof itm.prijs === "number"? _prijs+=itm.prijs : null) }) return _prijs }

a nivel de personen (primero)

 var total_prijs = 0 reizen.personen.map(item =>{ const reizen = item.reizen; total_prijs+=(getTotalPrijs(reizen)) }) console.log(total_prijs)
about 4 years ago · Juan Pablo Isaza Report

0

Si necesita hacer frente a los prijs que aparecen en lugares que no están bien definidos, puede hacer algo como lo siguiente usando la recursividad:

 const reizen = {"personen":[{"naam":"Bob","reizen":[{"locatie":"Frankrijk","uitgaven":[{"voorwerp":"Sokken","prijs":15},{"voorwerp":"Sleutelhanger","prijs":6},{"voorwerp":"Restaurant","prijs":26}]},{"locatie":"Duitsland","uitgaven":[{"voorwerp":"Taxi","prijs":30}]}]}]}; const random = { one: { prijs: 6 }, two: [ { prijs: 12, other: [{ prijs: 7 }, { prijs: 3 }] }, { prijs: 2, something: 'fred' }, ], }; const sum_prijs = (source) => Array.isArray(source) ? source.map(sum_prijs).reduce((a, b) => a + b) : Object.entries(source).reduce( (acc, [key, val]) => acc + ((typeof val === 'object') ? sum_prijs(val) : (key === 'prijs' ? val : 0)), 0 ); console.log(sum_prijs(reizen)); console.log(sum_prijs(random));

Básicamente lo mismo pero sin recursividad:

 const reizen = {"personen":[{"naam":"Bob","reizen":[{"locatie":"Frankrijk","uitgaven":[{"voorwerp":"Sokken","prijs":15},{"voorwerp":"Sleutelhanger","prijs":6},{"voorwerp":"Restaurant","prijs":26}]},{"locatie":"Duitsland","uitgaven":[{"voorwerp":"Taxi","prijs":30}]}]}]}; const random = { one: { prijs: 6 }, two: [ { prijs: 12, other: [{ prijs: 7 }, { prijs: 3 }] }, { prijs: 2, something: 'fred' }, ], }; const push_concat = (array1, array2) => { for(let i = 0; i < array2.length; i++) array1.push(array2[i]); return array1; }; const sum_prijs = (source) => { let sum = 0; let queue = [source]; while(queue.length > 0) { let item = queue.pop(); if(Array.isArray(item)) push_concat(queue, item); else Object.entries(item).forEach(([key, val]) => { if(typeof val === 'object') queue.push(val); else if(key === 'prijs') sum += val; }); } return sum; }; console.log(sum_prijs(reizen)); console.log(sum_prijs(random));

about 4 years ago · Juan Pablo Isaza Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!