Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

258
Vistas
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 Respuestas
Responde la pregunta

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 Denunciar

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 Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda