Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

262
Visualizações
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 Respostas
Responde à pergunta

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda