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

299
Views
Cómo hacer coincidir valores duplicados en matrices anidadas en JS

Tengo una matriz que contiene matrices anidadas que se crean dinámicamente, se ve así:

 [['1', '2'],['1','3', '4'],['1', '3']]

Estoy tratando de implementar la lógica AND obteniendo solo valores duplicados de estas matrices. Mi salida esperada aquí sería ['1'] ya que todas las matrices anidadas deben contener el mismo valor.

 // [['1', '2'],['1','3', '4'],['1', '3']] const arrays = [...new Set(response)].filter(newSet => newSet.length > 0); const builder = []; // array of all the id's no longer needed // [[],[],[]] arrays.forEach(arr => { // [] arr.forEach(value => { // [[], [], []] const found = arrays.filter(a => a.find(v => v === value)); if (found.length === 0) builder.push(value); }); }); console.log(builder); // empty []

Esto me da una matriz vacía debido al filter() . ¿Cómo podría devolver una matriz de valores que contienen todas las matrices (3 en este caso, pero podrían ser más)?

El resultado esperado con la entrada anterior sería ["1"] . Cualquier ayuda apreciada.

about 4 years ago · Juan Pablo Isaza
3 answers
Answer question

0

por lo que entiendo, necesitas los elementos comunes de toda la matriz

 let response1 = [['1', '2'],['1','3', '4'],['1', '3']] let response2 = [['1', '2', '3'],['1','3', '4'],['1', '3']] const getCommon = res => [...new Set(res.flat())].filter(a => res.every(c => c.includes(a))); console.log(getCommon(response1)) console.log(getCommon(response2))

ACTUALIZAR Aparentemente, la transformación establecida es innecesaria ya que de todos modos tiene que dar los elementos comunes a cada matriz, por lo que el filtrado de res[0] debería ser suficiente

 let response1 = [['1', '2'],['1','3', '4'],['1', '3']] let response2 = [['1', '2', '3'],['1','3', '4'],['1', '3']] const getCommon = res => res[0].filter(a => res.every(c => c.includes(a))); console.log(getCommon(response1)) console.log(getCommon(response2))

about 4 years ago · Juan Pablo Isaza Report

0

Puede crear un objeto de conteo que tenga la frecuencia de cada número y simplemente verificar si la frecuencia de un número es igual a la longitud de la matriz original.

 const getIntersectVals = (arrayOfVals)=>{ const freqs = {}; for(let arr of arrayOfVals){ for(let val of arr){ if(freqs[val]) freqs[val]++; else freqs[val] = 1; } } const uniqueVals = Object.keys(freqs); const correctVals = uniqueVals.filter(elem=>{ return freqs[elem] === arrayOfVals.length; }) return correctVals; } const arrayOfVals = [['1', '2'],['1','3', '4'],['1', '3']]; console.log(getIntersectVals(arrayOfVals))

about 4 years ago · Juan Pablo Isaza Report

0

Intersección de Lodash si no te importa

 const arrayOfVals = [['1', '2'],['1','3', '4'],['1', '3']]; const result = _.intersection(...arrayOfVals); console.log(result);
 .as-console-wrapper{min-height: 100%!important; top: 0}
 <script src="https://cdn.jsdelivr.net/npm/lodash@4.17.21/lodash.min.js"></script>

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!