al menos uno de los valores en la matriz "datos" obj matriz1 coincide con la matriz "datos" en el objeto matriz2
> array1 array1 = [ { id: '1', name: 'ron', data: ['p1'] }, { id: '2', name: 'lon', data: ['p2'] }, { id: '3', name: 'voon', data: ['p4'] } ]; > array2 array2 = [ { id: '1', name: 'fgr', data:['p1','p2','p3'] }, { id: '2', name: 'gone', data:['p1','p2','p3'] } ]salida: { id: '1', nombre: 'ron', datos: ['p1'] }, { id: '2', nombre: 'lon', datos: ['p2'] }
Con el siguiente supuesto:
array1 tiene objetos, cada uno de los cuales siempre tiene data prop, que es una matrizarray2 también tiene objetos y estos objetos siempre tendrán data utilería que también son una matrizarray1 cuyos data tengan al menos un elemento común con alguno de los data de los objetos de array2 .esta solución puede funcionar:
const findNeedleInHaystack = (needle = array1, haystack = array2) => ( needle.reduce((acc, itm) => ( haystack .map(x => x.data) .flat() .some(x => itm.data.includes(x)) ? [...acc, itm] : [...acc] ), []) );Explicación
needle (es decir, matriz1) usando .reduce.map en la matriz haystack (es decir, matriz2) para separar los data de cada objeto.flat() para transformar la matriz resultante de 2 dimensiones en 1 dimensión.some para ver si algún elemento en la matriz unidimensional también está presente en la matriz de data de itmitm con el resultado (usando ... operador de propagación en acc - el agregador/acumulador)itm .Fragmento de código
const array1 = [ { id: '1', name: 'ron', data: ['p1'] }, { id: '2', name: 'lon', data: ['p2'] }, { id: '3', name: 'voon', data: ['p4'] } ]; const array2 = [ { id: '1', name: 'fgr', data:['p1','p2','p3'] }, { id: '2', name: 'gone', data:['p1','p2','p3'] } ]; const findNeedleInHaystack = (needle = array1, haystack = array2) => ( needle.reduce((acc, itm) => ( haystack.map(x => x.data).flat().some(x => itm.data.includes(x)) ? [...acc, itm] : [...acc] ), []) ); console.log(findNeedleInHaystack());