cómo comparar una matriz de objetos con matrices usando javascript
Necesito verificar la matriz de objetos según las condiciones.
si el targetvalue es el mismo y code no tiene valor en la lista de arraylist devuelve una matriz de objetos
de lo contrario, si el targetvalue es el mismo y code mismo valor en la lista de arraylist devuelve una matriz de objetos
si no volver []
var arraylist =["IT","FI"]; var arrobj1 =[ {id:1, name: "sonu", code: "IT", targetvalue: "908"}, {id:2, name: "abi", code: "IT", targetvalue: "834"}, {id:3, name: "lisa", code: "SP", targetvalue: "834"}, {id:4, name: "ben", code: "FI", targetvalue: "234"}, ] Expected Output //same value , and has "IT" [] **** var arrobj2 =[ {id:1, name: "sonu", code: "IT", targetvalue: "908"}, {id:2, name: "abi", code: "IT", targetvalue: "834"}, {id:3, name: "lisa", code: "SG", targetvalue: "234"}, {id:4, name: "ben", code: "SP", targetvalue: "234"}, ] Expected Output //same targetvalue and no include of `FI or IT` so return [ {id:3, name: "lisa", code: "SG", targetvalue: "234"}, {id:4, name: "ben", code: "SP", targetvalue: "234"}, ] **** var arrobj3 =[ {id:1, name: "sonu", code: "IT", targetvalue: "908"}, {id:3, name: "lisa", code: "FI", targetvalue: "234"}, {id:4, name: "ben", code: "FI", targetvalue: "234"}, ] Expected Output // targetvalue and code same [ {id:3, name: "lisa", code: "FI", targetvalue: "234"}, {id:4, name: "ben", code: "FI", targetvalue: "234"}] I tried const checkIdList = list => { const idlist = ['IN', 'FI']; const resultarray = list .map((obj, i) => list.find((elem, index) => { if (i !== index && elem.targetvalue === obj.targetvalue && (element.code === obj.code || idlist.includes(element.code)) { return obj; } })) .filter(x => x); return resultarray; }; var finalResult = this.checkIdList(arrobj1);Puede comenzar agrupando los elementos por targetValue y luego filtrar los Object.values del resultado por sus tres condiciones:
function checkIdList(array, list) { // group by targetValue const grouped = {}; for (const o of array) { (grouped[o.targetvalue] ??= []).push(o); } return Object.values(grouped) .filter(g => g.length > 1 // subarrays of length > 1 indicate duplicates && ( g.every(({ code }) => !list.includes(code)) || // if every code is not in the list g.every(({ code }, _, a) => code === a[0].code) // OR include if all codes are equal and included in list )) .flat(); } const arraylist = ["IT", "FI"]; const arrobj1 = [{ id: 1, name: "sonu", code: "IT", targetvalue: "908" }, { id: 2, name: "abi", code: "IT", targetvalue: "834" }, { id: 3, name: "lisa", code: "SP", targetvalue: "834" }, { id: 4, name: "ben", code: "FI", targetvalue: "234" },]; const arrobj2 = [{ id: 1, name: "sonu", code: "IT", targetvalue: "908" }, { id: 2, name: "abi", code: "IT", targetvalue: "834" }, { id: 3, name: "lisa", code: "SG", targetvalue: "234" }, { id: 4, name: "ben", code: "SP", targetvalue: "234" },]; const arrobj3 = [{ id: 1, name: "sonu", code: "IT", targetvalue: "908" }, { id: 3, name: "lisa", code: "FI", targetvalue: "234" }, { id: 4, name: "ben", code: "FI", targetvalue: "234" },]; console.log(checkIdList(arrobj1, arraylist)); console.log(checkIdList(arrobj2, arraylist)); console.log(checkIdList(arrobj3, arraylist));