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

85
Vistas
¿Cómo crear una matriz única de objetos en una matriz anidada profunda de objetos?

así que tengo una matriz en la que una clave tiene otra matriz de objetos. Necesito hacer una matriz única de objetos a partir de esta matriz basada en dos niveles de clave e ID de usuario usando lodash o vanila JavaScript
por ejemplo

 const data = [ { values: { output: [], } }, { values: { output: [ { level: 1, userId: "810", }, { level: 1, userId: "811", }, { level: 2, userId: "811", }, ], }, }, { values: { output: [ { level: 1, userId: "810", }, ], } }, { values: { output: [ { level: 1, userId: "810", }, { level: 3, userId: "810", }, ], } }, { values: { output: [ { level: 1, userId: "810", }, { level: 3, userId: "810", }, ], } } ];

y la salida esperada es

 let output =[ { level: 1, userId: "810", }, { level: 1, userId: "811", }, { level: 2, userId: "811", }, { level: 3, userId: "810", }, ]
about 4 years ago · Juan Pablo Isaza
2 Respuestas
Responde la pregunta

0

Obtenga una matriz de todas las propiedades de output con _.flatMap() (o Array.flatMap() , y luego use _.uniqBy() para obtener solo elementos únicos. En la devolución de llamada _.uniqBy() devuelva un valor personalizado combinando el level y userId a una sola cadena.

ES5:

 var data = [{"values":{"output":[]}},{"values":{"output":[{"level":1,"userId":"810"},{"level":1,"userId":"811"},{"level":2,"userId":"811"}]}},{"values":{"output":[{"level":1,"userId":"810"}]}},{"values":{"output":[{"level":1,"userId":"810"},{"level":3,"userId":"810"}]}},{"values":{"output":[{"level":1,"userId":"810"},{"level":3,"userId":"810"}]}}]; var result = _.uniqBy( _.flatMap(data, function(o) { return o.values.output; }), function(o) { return o.level + '-' + o.userId; } ); console.log(result);
 <script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.21/lodash.min.js" integrity="sha512-WFN04846sdKMIP5LKNphMaWzU7YpMyCU245etK3g/2ARYbPK9Ub18eG+ljU96qKRCWh+quCY7yefSmlkQw1ANQ==" crossorigin="anonymous" referrerpolicy="no-referrer"></script>

ES6:

 const data = [{"values":{"output":[]}},{"values":{"output":[{"level":1,"userId":"810"},{"level":1,"userId":"811"},{"level":2,"userId":"811"}]}},{"values":{"output":[{"level":1,"userId":"810"}]}},{"values":{"output":[{"level":1,"userId":"810"},{"level":3,"userId":"810"}]}},{"values":{"output":[{"level":1,"userId":"810"},{"level":3,"userId":"810"}]}}]; const result = _.uniqBy( _.flatMap(data, o => o.values.output), o => `${o.level}-${o.userId}` ); console.log(result);
 <script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.21/lodash.min.js" integrity="sha512-WFN04846sdKMIP5LKNphMaWzU7YpMyCU245etK3g/2ARYbPK9Ub18eG+ljU96qKRCWh+quCY7yefSmlkQw1ANQ==" crossorigin="anonymous" referrerpolicy="no-referrer"></script>

about 4 years ago · Juan Pablo Isaza Denunciar

0

Aquí hay una solución JS muy vainilla. Esto no será rápido en grandes conjuntos de datos, pero para conjuntos como su ejemplo, no es tan malo. Primero reúne todos sus datos en una sola matriz y luego crea una matriz nueva y sin duplicados. Si necesita tener cuidado al sobrescribir los datos que pasa, puede clonarlos primero.

 function mergeAllData(data) { var allData = []; for (var i in data) { allData = allData.concat(data[i].values.output); } return allData; } function filterDuplicates(allData) { var ret = []; for (var i in allData) { var current = allData[i]; ret.push(current); for (var j in allData) { if (isADuplicate(current, allData[i])) { allData.splice(j, 1); } } } return ret; } function isADuplicate(t1, t2) { return t1.level === t2.level && t1.userId === t2.userId; } console.log(filterDuplicates(mergeAllData()));
about 4 years ago · Juan Pablo Isaza 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