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

136
Views
Javascript obtiene el valor máximo agrupado por otro atributo

Hola, tengo una matriz que se ve así

 result.entities= [ {zs_numero: "1", "zs_coefficient": "2", "zs_score": "50"}, {zs_numero: "1", "zs_coefficient": "2", "zs_score": "55"}, {zs_numero: "2", "zs_coefficient": "4", "zs_score": "2"}, {zs_numero: "2", "zs_coefficient": "4", "zs_score": "10"}, {zs_numero: "3", "zs_coefficient": "3", "zs_score": "33"}, {zs_numero: "3", "zs_coefficient": "3", "zs_score": "35"}, ]

Quería obtener el puntaje máximo para cada "zs_numero" y luego multiplicar todos los puntajes máximos con el coeficiente para obtener un resultado final. Entonces, quiero obtener valores como este:

 newarray= [ {zs_numero: "1", "zs_coefficient": "2", "zs_score": "55"}, {zs_numero: "2", "zs_coefficient": "4", "zs_score": "10"}, {zs_numero: "3", "zs_coefficient": "3", "zs_score": "35"}, ]

y luego haga una variable que calcule todos los (zs_coficient*zs_score) y súmelos

Intenté esto pero no funcionó

 var newarray = [] result.entities.forEach(function (a) { if (!this[a.zs_numero]) { this[a.zs_numero] = { zs_numero: a.zs_numero, zs_coefficient: 0, zs_score: 0 }; newarray.push(this[a.zs_numero]); } this[a.zs_numero].zs_coefficient = a.zs_coefficient; this[a.zs_numero].zs_score = Math.max(this[a.zs_numero].zs_score, a.zs_score); }, Object.create(null)); console.log(newarray) for(var i = 0; i < newarray.length; i++){ max=max+newarray.zs_coefficient*newarray.zs_score }
about 4 years ago · Juan Pablo Isaza
2 answers
Answer question

0

Puede usar Array.reduce() para obtener el resultado deseado, creando un mapa con clave en zs_numero . Si no hay ningún objeto presente en la propiedad zs_numero o el zs_score es mayor que el valor existente, lo reemplazamos.

Podemos usar Array.reduce() nuevamente para calcular el total (suma de zs_coficient x zs_score);

 result = { entities: [ {zs_numero: "1", "zs_coefficient": "2", "zs_score": "50"}, {zs_numero: "1", "zs_coefficient": "2", "zs_score": "55"}, {zs_numero: "2", "zs_coefficient": "4", "zs_score": "2"}, {zs_numero: "2", "zs_coefficient": "4", "zs_score": "10"}, {zs_numero: "3", "zs_coefficient": "3", "zs_score": "33"}, {zs_numero: "3", "zs_coefficient": "3", "zs_score": "35"}, ] } const output = Object.values(result.entities.reduce ((acc, cur) => { if (!acc[cur.zs_numero] || (+cur.zs_score > +acc[cur.zs_numero].zs_score)) { acc[cur.zs_numero] = cur; } return acc; }, {})); console.log('Output:', output) const total = output.reduce((acc, cur) => { return acc + cur.zs_score * cur.zs_coefficient }, 0); console.log('Total score:', total);
 .as-console-wrapper { max-height: 100% !important; top: 0; }

about 4 years ago · Juan Pablo Isaza Report

0

Aquí hay un bucle simple para resolver su problema.

 const entities= [ {zs_numero: "1", "zs_coefficient": "2", "zs_score": "50"}, {zs_numero: "1", "zs_coefficient": "2", "zs_score": "55"}, {zs_numero: "2", "zs_coefficient": "4", "zs_score": "2"}, {zs_numero: "2", "zs_coefficient": "4", "zs_score": "10"}, {zs_numero: "3", "zs_coefficient": "3", "zs_score": "33"}, {zs_numero: "3", "zs_coefficient": "3", "zs_score": "35"}, ] let finalResult = [] entities.map(d => { let index = finalResult.findIndex(p => p.zs_numero == d.zs_numero) if(index == -1) { finalResult.push(d) } else { if(parseInt(d.zs_score) > parseInt(finalResult[index].zs_score)) { finalResult[index] = {...d}; } } }) console.log(finalResult) let Total = 0; finalResult.map(d=> {Total += (d.zs_score * d.zs_coefficient)}) console.log(Total)

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!