function diff(data1, data2, compare = (a, b) => a === b) {
const arr = Array.isArray(data2) ? data2 : [...data2];
const result = [];
for (const n of data1) {
if (!arr.some(m => compare(m, n))) {
result.push(n);
}
}
return result;
}
const result = diff(arr1, arr2, (a, b) => a.id === b.id);
или
function* diff(data1, data2, key = n => n) {
const getKey = key instanceof Function ? key : n => n[key];
const keys = new Set(Array.from(data2, getKey));
for (const n of data1) {
if (!keys.has(getKey(n))) {
yield n;
}
}
}
const result = [...diff(arr1, arr2, 'id')];