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

261
Views
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 answers
Answer question

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 Report

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 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!