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

83
Views
¿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 answers
Answer question

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 Report

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