Tengo 2 matrices, una es "searchEachIndex" y otra es "datos".
Basado en la matriz "searchEachIndex", quiero filtrar la matriz "datos". es decir,
Aquí, en la matriz searchEachIndex, tengo 123 valores que coinciden con el identificador de empleo de la matriz de datos.
debe insertar el objeto en la matriz res aquí { id: 2, employeeId: 123 }, { id: 3, employeeId: 123 }, si ambos valores coinciden. de lo contrario, inserte los valores de searchEachIndex que no coinciden aquí 1234, 12 en otra matriz, es decir, matriz sin datos.
let searchEachIndex = [123, 1234, 12] let data = [ { id: 1, employeId: 121 }, { id: 2, employeId: 123 }, { id: 3, employeId: 123 } ]; let res=[]; let noData = []; searchEachIndex.forEach(val => { data.map(item => { if(item.employeId === val) { res.push(item) } }) }) console.log('Both emp id and searchEachIndex value matched array', res); consolelog('Ids not found array', noData);En realidad, necesito una respuesta como la siguiente: res: [{id: 2, employeeId: 123}, {id: 3, employeeId: 123}] y noData: [1234, 12]
Puede sustituir el .map con .forEach ya que no necesita que se devuelva una matriz transformada y solo está buscando un bucle for.
También puede mantener un indicador booleano que le permita saber si el val actual tenía una entrada correspondiente en la matriz de data . De esa manera, puede insertar (/ no insertar) en su matriz noData .
Desarrollando tu código:
let searchEachIndex = [123, 1234, 12] let data = [ { id: 1, employeId: 121 }, { id: 2, employeId: 123 }, { id: 3, employeId: 123 } ]; let res=[]; let noData = []; searchEachIndex.forEach(val => { let found = false; data.forEach(item => { if(item.employeId === val) { found = true; res.push(item) } }) if(!found) noData.push(val); }) console.log('Both emp id and searchEachIndex value matched array', res); console.log('Ids not found array', noData);Puede tomar un objeto para realizar un seguimiento de los valores utilizados y filtrar las matrices.
const search = [123, 1234, 12], used = Object.fromEntries(search.map(k => [k, false])), data = [{ id: 1, employeId: 121 }, { id: 2, employeId: 123 }, { id: 3, employeId: 123 }], result = data.filter(({ employeId }) => { if (employeId in used) return used[employeId] = true; }), noData = search.filter(k => !used[k]); console.log(noData); console.log(result); .as-console-wrapper { max-height: 100% !important; top: 0; }