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

268
Views
Javascript: cómo incrementar valores en claves únicas

Estoy tratando de hacer una matriz con claves únicas y valores incrementados asignados, para terminar con una lista ponderada.

En PHP , lo hago así...

 $crit1 = ['a','b','c']; $crit2 = ['c','d','e']; $weight = []; foreach ( $crit1 as $item ) {$weight[$item] += 1;} foreach ( $crit2 as $item ) {$weight[$item] += 2;} // print_r($weight); => array([a] => 1 [b] => 1 [c] => 3 [d] => 2 [e] => 2)

...con 'c' terminando con la mayor cantidad de puntos: 1 por aparecer en el primer foreach y otros 2 por aparecer en el segundo.

Tratando de traducir esto a JS ...

 const crit1 = ['a','b','c']; const crit2 = ['c','d','e']; let weight = []; crit1.forEach(function (item) { weight.push({ [item]: +1 }) }); crit2.forEach(function (item) { weight.push({ [item]: +2 }) }); // console.log(weight) => [{ a: 1}, { b: 1}, { c: 1}, { c: 2}, { d: 2}, { e: 2}]

... ya no funciona: los valores para 'c' se asignan por separado, por lo que la matriz genera 6 elementos en lugar de solo 5.

¿Qué estoy haciendo mal?

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

0

  1. En lugar de una matriz, use un objeto para que el valor de las claves se pueda aumentar

  2. Como estamos usando un objeto, no podemos usar push , pero necesitaremos abordar la clave

  3.  weight[item] = (weight[item] || 0) + 1)

    Incrementa la clave del item actual en el objeto de weight en 1 , si aún no está definido, lo establecemos en 0 .

 const crit1 = ['a','b','c']; const crit2 = ['c','d','e']; let weight = {}; crit1.forEach((item) => weight[item] = (weight[item] || 0) + 1); crit2.forEach((item) => weight[item] = (weight[item] || 0) + 2); let arr = Object.keys(weight).reduce((prev, cur) => [ ...prev, { [cur]: weight[cur] } ], []); console.log(weight); console.log(arr);

 { "a": 1, "b": 1, "c": 3, "d": 2, "e": 2 }

Si realmente desea una matriz que contenga objetos con una sola clave, como se muestra en su comentario , podemos usar reduce() para realizar la conversión:

 let arr = Object.keys(weight).reduce((prev, cur) => [ ...prev, { [cur]: weight[cur] } ], []);

Producirá:

 [ { "a": 1 }, { "b": 1 }, { "c": 3 }, { "d": 2 }, { "e": 2 } ]
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!