Tengo una matriz que contiene otras matrices con identificadores de cadena. Necesito obtener una matriz con identificadores de cadena, que existen en todas las matrices de los padres.
Aquí hay un ejemplo:
const parentArray = [ ['test1', 'test2', 'test3'], ['test2', 'test4', 'test5'], ['test3', 'test2', 'test6']]; //some magic. Maybe use lodash instersection func console.log(result) => ['test2']¡Nota IMPORTANTE! No sé, cuántas matrices de elementos en la matriz principal, ese es el problema que no puedo entender cómo usar la función de intersección lodash :(
const parentArray = [ ['test1', 'test2', 'test3'], ['test2', 'test4', 'test5'], ['test3', 'test2', 'test6']]; let common = parentArray.reduce((p,c) => p.filter(e => c.includes(e))); // ['test2']La siguiente puede ser una forma posible de lograr el resultado deseado.
Ejemplo de código
const commonElements = (arr1, arr2) => ( arr1.length === 0 ? arr2 : [...(new Set([...arr1, ...arr2]))] .filter( x => arr1.includes(x) && arr2.includes(x) ) ); const intersectAllElements = (arr = parentArray) => ( arr.reduce( (fin, itm) => (commonElements(fin, itm)), [] ) );Explicación
commonElements que compartirá elementos comunes entre 2 matrices, o si la primera matriz está vacía, la segunda matrizparentArray usando .reducefin del agregador como una matriz vacíaparentArray , realice un seguimiento de los elementos comunes entre el agregador y el elemento dadoFragmento de código
const parentArray = [ ['test1', 'test2', 'test3'], ['test2', 'test4', 'test5'], ['test3', 'test2', 'test6']]; const commonElements = (arr1, arr2) => ( arr1.length === 0 ? arr2 : [...(new Set([...arr1, ...arr2]))] .filter( x => arr1.includes(x) && arr2.includes(x) ) ); const intersectAllElements = (arr = parentArray) => ( arr.reduce( (fin, itm) => (commonElements(fin, itm)), [] ) ); console.log(intersectAllElements());Solución Lodash :
const parentArray=[["test1","test2","test3"],["test2","test4","test5"],["test3","test2","test6"]]; const result = parentArray.reduce((acc, arr) => _.intersection(acc, arr)); 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>