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

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

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 Denunciar

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 Denunciar

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