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

217
Views
Empuje a la matriz dentro del nuevo Mapa reducido ()

Estoy tratando de empujar a una matriz en una new Map() de una matriz de objetos, pero por alguna razón solo empuja dos elementos por matriz.

 const data = [ { keyword: 'engines', url: 'google.com', }, { keyword: 'engines', url: 'duckduckgo.com', }, { keyword: 'pc', url: 'mac.com', }, { keyword: 'pc', url: 'linux.com', }, { keyword: 'pc', url: 'windows.com', } ] let urls = [] const mapper = data.reduce((acc, obj) => { urls.push(obj.url) if (!acc.has(obj.keyword)) { acc.set(obj.keyword, urls ) } else { urls = [] } return acc }, new Map()) console.log(mapper)
 .as-console-wrapper { max-height: 100% !important; top: 0; }

Rendimiento esperado

 Map(2) { 'engines' => [ 'google.com', 'duckduckgo.com'], 'pc' => [ 'mac.com', 'linux.com', 'windows.com'] }

Ni siquiera sé por qué el fragmento no funciona en stackoverflow, funciona bien en el editor.

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

0

Esto le da la salida correcta.

Debe usar una nueva matriz para cada palabra clave; de lo contrario, está compartiendo un solo objeto y corrompiéndolo a medida que avanza.

REPL de StackOverflow no muestra el contenido del Map de la misma manera que los navegadores cuando usan console.log , así que usé una solución alternativa para mostrar los datos.

 const data = [ { keyword: 'engines', url: 'google.com', }, { keyword: 'engines', url: 'duckduckgo.com', }, { keyword: 'pc', url: 'mac.com', }, { keyword: 'pc', url: 'linux.com', }, { keyword: 'pc', url: 'windows.com', } ] const mapper = data.reduce((acc, obj) => { if (!acc.has(obj.keyword)) { acc.set(obj.keyword, [] ) } let urls = acc.get(obj.keyword) urls.push(obj.url); return acc; }, new Map()) /** Expected output per OP: Map(2) { 'engines' => [ 'google.com', 'duckduckgo.com'], 'pc' => [ 'mac.com', 'linux.com', 'windows.com'] } */ console.log([...mapper.entries()])
 .as-console-wrapper { max-height: 100% !important; top: 0; }

about 4 years ago · Juan Pablo Isaza Report

0

Aquí hay una implementación compacta que producirá su salida

 data.reduce( (a, o) => a.set(o.keyword, [...a.get(o.keyword) || [], o.url]), new Map() )
about 4 years ago · Juan Pablo Isaza Report

0

Lo arreglé con esto pero no se siente bien

 const data = [ { keyword: 'engines', url: 'google.com', }, { keyword: 'engines', url: 'duckduckgo.com', }, { keyword: 'pc', url: 'mac.com', }, { keyword: 'pc', url: 'linux.com', }, { keyword: 'pc', url: 'windows.com', } ] let urls = [] const mapper = data.reduce((acc, obj) => { if (!acc.has(obj.keyword)) { urls = [] } urls.push(obj.url) acc.set(obj.keyword, urls ) return acc }, new Map()) console.log(mapper)

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!