для примитивов:
const arr1 = ['a', 'b', 'c', 'd', 'e', 'f', 'g'];
const arr2 = ['b', 'd', 'f'];
const result = arr1.filter(el => !arr2.includes(el));
// результат ['a', 'c', 'e', 'g']
для объектов по искомому ключу:
const arr1 = [{name: 'Carl', age: 32}, {name: 'Sally', age: 24}];
const arr2 = [{name: 'Carl', age: 32}];
const result = arr1.filter(x => !arr2.some(y => x.name === y.name));
// результат [{name: 'Sally', age: 24}]
полное сравнение объектов:
const compareObjects = (obj1, obj2) => {
for (let p in obj1){
if (Object.prototype.hasOwnProperty.call(obj1, p)) {
if(obj1[p] !== obj2[p]){
return false;
}
}
}
for(let p in obj2){
if (Object.prototype.hasOwnProperty.call(obj2, p)) {
if (obj1[p] !== obj2[p]) {
return false;
}
}
}
return true;
};
const arr1 = [{name: 'Carl', age: 32}, {name: 'Sally', age: 24}];
const arr2 = [{name: 'Carl', age: 32}];
const result = arr1.filter(x => !arr2.some(y => compareObjects(x, y)));
// результат [{name: 'Sally', age: 24}]
пояснение почему
Object.prototype.hasOwnProperty.call(obj, p), а не
obj.hasOwnProperty(p).
Так же можно использовать
differesnce из
lodash.