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

299
Vistas
¿Cómo obtener valores únicos de una matriz de objetos JS?

Necesito ayuda para averiguar cómo obtener valores únicos de una matriz de objetos en este formato. He revisado varios ejemplos, pero ninguno tenía los valores de una clave como matriz. Gracias de antemano por tu consejo.

Tengo una matriz JS con objetos complejos con algunos valores de objeto que son matrices:

 let array = [ { key1: ["one","two","four"], key2: [1,2,4] }, { key1: ["two","four","six"], key2: [2,4,6] }, { key1: "nine", key2: 9 }, ];

Quiero obtener los valores únicos para todas las claves en el objeto (para que sea compatible con cualquier estructura) y generar un resultado como este:

 [ { key1: ["one","two","four", "six", "nine"], key2: [1,2,4,6,9] } ]
about 4 years ago · Santiago Trujillo
3 Respuestas
Responde la pregunta

0

Puedes probar esto:

 let array = [ { key1: ["one","two","four"], key2: [1,2,4] }, { key1: ["two","four","six"], key2: [2,4,6] }, { key1: "nine", key2: 9 }, ]; let keys = [...new Set(array.flatMap(d => Object.keys(d)))]; let valuesAsObj = Object.fromEntries( keys.map(k => [ k, [... new Set(array.flatMap(d => d[k] ? d[k] : null).filter(v => v != null && v != undefined))] ]) ); let valuesAsArr = keys.map(k => [... new Set(array.flatMap(d => d[k] ? d[k] : null).filter(v => v != null && v != undefined))]) console.log(valuesAsObj); console.log(valuesAsArr);

about 4 years ago · Santiago Trujillo Denunciar

0

Lo abordé creando un Set para cada propiedad única y agregando todas las propiedades a ese conjunto.

 let array = [ { key1: ["one","two","four"], key2: [1,2,4] }, { key1: ["two","four","six"], key2: [2,4,6] }, { key1: "nine", key2: 9 }, ]; const result = {}; array.forEach(a => { for (let key in a) { if (!result[key]) result[key] = new Set(); let v = a[key]; if (!Array.isArray(v)) v = [v]; v.forEach(result[key].add, result[key]); } }); console.log(result ); const overlyComplicatedResult = Object.entries(result).map(([key,val]) => ({[key]: [...val]})); console.log(overlyComplicatedResult);

Personalmente, estoy satisfecho con los resultados en el formato intermedio que se almacenan en la variable de result , que es solo un objeto donde cada propiedad es una de las claves y el valor de cada propiedad es un Set de todos los valores distintos.

Pero, si realmente quiere transformar eso en su resultado demasiado complicado, donde tiene una matriz de objetos, cada uno con una sola propiedad, y los elementos únicos se almacenan en una matriz en lugar de un Set , entonces el código se proporciona arriba como un paso de transformación final usando Object.entries .

about 4 years ago · Santiago Trujillo Denunciar

0

Podrías intentar algo como esto:

 let array = [ { key1: ["one","two","four"], key2: [1,2,4] }, { key1: ["two","four","six"], key2: [2,4,6] }, { key1: "nine", key2: 9 }, ]; let obj = {}; array.forEach((item) => Object.entries(item).forEach((entry) => { if (!obj[entry[0]]) obj[entry[0]] = []; !Array.isArray(entry[1]) ? obj[entry[0]].push(entry[1]) : (obj[entry[0]] = [...obj[entry[0]], ...entry[1]]); }) ); /*ADDED LOGIC TO HAVE UNIQUE VALUES IN THE OBJECT*/ Object.entries(obj).forEach( (entry) => (obj[entry[0]] = Array.from(new Set(entry[1]))) ); console.log(obj); let result = []; Object.entries(obj).forEach((entry) => result.push({ [entry[0]]: Array.from(new Set(entry[1])), }) ); console.log(result);

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