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

133
Views
¿Cómo obtener una matriz de valores únicos de matrices dentro de una matriz de objetos?

Tengo una matriz dada de objetos algo así como:

 var items = [ {item: [{foo: 21, bar: 'a' }, {foo: 5,bar: 'e'},{foo: 167, bar: 'c'}]}, {item: [{foo: 42, bar: 'a' }, {foo: 45,bar: 'd'},{foo: 7, bar: 'c'}]}, {item: [{foo: 99, bar: 'b' }, {foo: 35,bar: 'c'},{foo: 22, bar: 'e'}]}, {item: [{foo: 31, bar: 'e' }, {foo: 22,bar: 'd'},{foo: 12, bar: 'a'}]} ]

y me gustaría obtener una nueva matriz que devuelva los valores únicos de todos los valores de la barra, por lo que se vería así:

 var uniqueBars = ['a','b','c','d','e'];

Tengo una solución para esto recorriendo todos los elementos, pero supongo que hay una manera más eficiente de hacerlo usando las funciones de ES6.

¿Hay alguna manera de crear la matriz de barras únicas anterior usando las características de ES6?

about 4 years ago · Santiago Trujillo
3 answers
Answer question

0

Iterar sobre items con flatMap y para cada map de matriz interna sobre esos objetos para devolver cada valor de bar . Empuje la matriz plana ordenada resultante en un Set para eliminar los duplicados y luego spread nuevamente en una matriz para que pueda registrar los valores deduplicados.

 const items=[{item:[{foo:21,bar:"a"},{foo:5,bar:"e"},{foo:167,bar:"c"}]},{item:[{foo:42,bar:"a"},{foo:45,bar:"d"},{foo:7,bar:"c"}]},{item:[{foo:99,bar:"b"},{foo:35,bar:"c"},{foo:22,bar:"e"}]},{item:[{foo:31,bar:"e"},{foo:22,bar:"d"},{foo:12,bar:"a"}]}]; // For each `obj.item.map` you'll get a nested array of // bar values from each object. Use `flatMap` on that array // to get all the values into one array, and then sort it const flattened = items.flatMap(obj => { return obj.item.map(inner => inner.bar); }).sort(); // Pass the flattened array into a new Set // and use spread to work that set into a new array const deduped = [...new Set(flattened)]; console.log(deduped);

about 4 years ago · Santiago Trujillo Report

0

Aquí una sola línea (aunque no estoy seguro de que sea la mejor manera):

 [...new Set(items.map(obj => obj.item.map(o => o.bar)).flat())]

Según lo sugerido por @Mulan y @Andy, en lugar de [].map().flat() , prefiera flatMap() :

 [...new Set(items.flatMap(obj => obj.item.map(o => o.bar)))]
about 4 years ago · Santiago Trujillo Report

0

Puede proporcionar una ruta de claves y obtener los valores para un Set .

 const getValues = (data, [key, ...keys]) => data.flatMap(o => keys.length ? getValues(o[key], keys) : o[key] ), items = [{ item: [{ foo: 21, bar: 'a' }, { foo: 5, bar: 'e' }, { foo: 167, bar: 'c' }] }, { item: [{ foo: 42, bar: 'a' }, { foo: 45, bar: 'd' }, { foo: 7, bar: 'c' }] }, { item: [{ foo: 99, bar: 'b' }, { foo: 35, bar: 'c' }, { foo: 22, bar: 'e' }] }, { item: [{ foo: 31, bar: 'e' }, { foo: 22, bar: 'd' }, { foo: 12, bar: 'a' }] }], keys = ['item', 'bar'], unique = [...new Set(getValues(items, keys))]; console.log(...unique);

about 4 years ago · Santiago Trujillo 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!