Tengo 2 matrices esto
let array1 = [ { designation: "SSE", emailId: "abc@gmail.com", employeeId: 1997, firstName: "user2", }, { designation: "DEVELOPER", emailId: "ab@gmail.com", employeeId: 19, firstName: "user1", }, { designation: "DEVELOPER", emailId: "ab@gmail.com", employeeId: 191, firstName: "user1", }, ]; let array2 = [ { designation: "SSE", emailId: "abc@gmail.com", employeeId: 199, firstName: "user2", }, { designation: "DEVELOPER", emailId: "ab@gmail.com", employeeId: 19, firstName: "user1", }, { designation: "DEVELOPER", emailId: "ab@gmail.com", employeeId: 191, firstName: "user1", }, { designation: "TESTER", emailId: "ab@gmail.com", employeeId: 1221, firstName: "user1", }, ];Mira, tengo algunos registros comunes en ambas matrices y falta uno en array2. Quiero fusionarlos en uno solo si employeeId no coincide. Como esto.
let array3 = [ {employeeId: 1997, isActive: false}, {employeeId: 199, isActive: true}, {employeeId: 19, isActive: true}, {employeeId: 191, isActive: true}, {employeeId: 1221, isActive: false} ]array3[3].isActive es falso porque no coincide en ambas matrices.
array1array2map() sobre todos los ids ( array_0_ids ) para:isActive en el resultado de !non_matching.includes(emplyeeId) let array1 = [{designation: "SSE", emailId: "abc@gmail.com", employeeId: 199, firstName: "user2", }, {designation: "DEVELOPER", emailId: "ab@gmail.com", employeeId: 19, firstName: "user1", }, {designation: "DEVELOPER", emailId: "ab@gmail.com", employeeId: 191, firstName: "user1", }, ]; let array2 = [{designation: "SSE", emailId: "abc@gmail.com", employeeId: 199, firstName: "user2", }, {designation: "DEVELOPER", emailId: "ab@gmail.com", employeeId: 19, firstName: "user1", }, {designation: "DEVELOPER", emailId: "ab@gmail.com", employeeId: 191, firstName: "user1", }, {designation: "TESTER", emailId: "ab@gmail.com", employeeId: 1221, firstName: "user1", }, ]; let array_1_ids = array1.map(i => i.employeeId); let array_2_ids = array2.map(i => i.employeeId); let array_0_ids = [ ...array_1_ids, ...array_2_ids ].filter((v, i, s) => s.indexOf(v) === i); let non_matching = array_2_ids.filter(id => !array_1_ids.includes(id)); let result = array_0_ids.map(emplyeeId => { return { emplyeeId, isActive: !non_matching.includes(emplyeeId) }; }); console.log(result); [ {"emplyeeId": 199, "isActive": true }, {"emplyeeId": 19, "isActive": true}, {"emplyeeId": 191, "isActive": true}, {"emplyeeId": 1221, "isActive": false} ]let result = []; const employeeIdArray2 = array2.map(e => e.employeeId); const employeeIdArray1 = array1.map(e => e.employeeId); const missingEmployeeIdArray = employeeIdArray2.length > employeeIdArray1.length ? employeeIdArray1 : employeeIdArray2; result = array2.map(e => { if (missingEmployeeIdArray.includes(e.employeeId)) { return { ...e, isActive: true } } else { return { ...e, isActive: false } } })isActive en verdadero cuando el número de ocurrencias sea 2. const array1 = [ { designation: "SSE", emailId: "abc@gmail.com", employeeId: 199, firstName: "user2", }, { designation: "DEVELOPER", emailId: "ab@gmail.com", employeeId: 19, firstName: "user1", }, { designation: "DEVELOPER", emailId: "ab@gmail.com", employeeId: 191, firstName: "user1", }, ]; const array2 = [ { designation: "SSE", emailId: "abc@gmail.com", employeeId: 199, firstName: "user2", }, { designation: "DEVELOPER", emailId: "ab@gmail.com", employeeId: 19, firstName: "user1", }, { designation: "DEVELOPER", emailId: "ab@gmail.com", employeeId: 191, firstName: "user1", }, { designation: "TESTER", emailId: "ab@gmail.com", employeeId: 1221, firstName: "user1", }, ]; const reducer = (acc, e) => ({ ...acc, [e.employeeId]: (acc[e.employeeId] + 1) || 1, }); const arr3 = Object.entries([...array1, ...array2].reduce(reducer, {})) .map(([employeeId, count]) => ({ employeeId, isActive: count == 2 })); console.log(arr3);