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

260
Visualizações
JavaScript: cree una secuencia para cada valor único en una matriz de objetos

Tengo una matriz de objetos y quiero crear una secuencia basada en cada valor. Por ejemplo, tome la matriz:

 let starting_data = [ {str: "a"}, {str: "a"}, {str: "b"}, {str: "c"}, {str: "a"}, {str: "c"}, {str: "a"}, {str: "b"} ]

Sé que puedo usar un mapa y reducir para encontrar el número único de cada valor str

 let uniques = starting_data.map(function(value) {return value.str;}).reduce((acc, val) => { acc[val] = acc[val] === undefined ? 1 : acc[val] += 1; return acc; }, {})

Pero no estoy seguro de cómo aprovechar esto para finalmente obtener lo que quiero como resultado deseado:

 let desired_output = [ {str: "a", count: 1}, {str: "a", count: 2}, {str: "b", count: 1}, {str: "c", count: 1}, {str: "a", count: 3}, {str: "c", count: 2}, {str: "a", count: 4}, {str: "b", count: 2} ]

Donde los conteos comienzan de nuevo para cada valor único, pero a s van a 4, y b y c van a 2. Intenté jugar con arr.sort si necesito hacer eso primero pero no estaba seguro de cómo ordenar según en un valor dentro de un objeto... Cualquier ayuda apreciada!!

about 4 years ago · Juan Pablo Isaza
2 Respostas
Responde à pergunta

0

puede hacer algo como mantener un objeto separado para realizar un seguimiento de los recuentos

 let starting_data = [ {str: "a"}, {str: "a"}, {str: "b"}, {str: "c"}, {str: "a"}, {str: "c"}, {str: "a"}, {str: "b"} ] let counts = {}; let res = starting_data.map(({str}) => { if(!counts[str])counts[str]=0; counts[str]+=1 return {str,count:counts[str]} }) console.log(res)

about 4 years ago · Juan Pablo Isaza Relatório

0

Lo mencionaste, quieres que sea puramente funcional, así que aquí está.

 let starting_data = [ { str: "a" }, { str: "a" }, { str: "b" }, { str: "c" }, { str: "a" }, { str: "c" }, { str: "a" }, { str: "b" }, ]; const uniqueCount = starting_data .reduce( (arr, { str }) => { const hash = arr[0]; hash[str] ||= 0; arr.push({ str, count: ++hash[str] }); return arr; }, [{}] ) .slice(1); console.log(uniqueCount);

Esto imprime:

 [ { str: 'a', count: 1 }, { str: 'a', count: 2 }, { str: 'b', count: 1 }, { str: 'c', count: 1 }, { str: 'a', count: 3 }, { str: 'c', count: 2 }, { str: 'a', count: 4 }, { str: 'b', count: 2 } ]

Cómo funciona

Esta solución mantiene un hash como el primer elemento de la matriz que construye reduce .

  1. La matriz comienza como [{}] .
  2. Rellene la clave hash con un 0 si la clave aún no existe.
  3. Empuje un nuevo elemento a la matriz con str y un count .
  4. hash[str] se incrementa en 1 y luego se usa como valor.

La matriz ahora se ve así:

 [{ a: 1 }, { str: "a", count: 1 }]
  1. Continuamos esto hasta que hayamos iterado a través de cada elemento.
 [ { a: 2 }, { str: 'a', count: 1 }, { str: 'a', count: 2 } ] [ { a: 2, b: 1 }, { str: 'a', count: 1 }, { str: 'a', count: 2 }, { str: 'b', count: 1 } ] // Continues until it finishes
  1. Al final, eliminamos este hash inicial cortando la matriz en adelante desde el primer elemento.

Espero que esto ayude.

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