lodash官方文档中的例子
var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];
_.differenceWith(objects, [{ 'x': 1, 'y': 2 }], _.isEqual);
// => [{ 'x': 2, 'y': 1 }]
使用场景:
differenceWith:要从一个数组objects中选出另一个数组(包含要排除的元素)中不存在的元素,比较器表示比较数组元素的方法,结果以数组形式返回剩余元素
isEqual:深比较,比较两个对象是否相等,相等返回true,否则返回false
深比较
function deepCompare(a, b) {
for (let aKey in a) {
if (a[aKey] === b[aKey]) continue
else return false
}
for (bKey in b) {
if (b[bKey] === a[bKey]) continue
else return false
}
return true
}
排除方法
function differenceWith(a, b, f) {
let res = [...a]
for (let item1 in a) {
for (let item2 in b) {
if (f(a[item1], b[item2]) === true) {
res[item1] = undefined;
break
}
}
}
return res.filter(item => {
return item != undefined
});
}
案例:
let arr1 = [
{ name: 'John', age: 18 },
{ name: 'Alex', age: 22 },
{ name: 'Joe', age: 12 },
{ name: 'Anna', age: 19 },
{ name: 'Lily', age: 14 },
{ name: 'Avril', age: 18 },
]
let arr2 = [
{ name: 'Anna', age: 19 },
{ name: 'Avril', age: 18 },
{ name: 'Alex', age: 22 },
{ name: 'Bob', age: 24 }//arr1中不存在的元素
]
console.log(differenceWith(arr1, arr2, deepCompare));
//[{"name": "John","age": 18},{"name": "Joe","age": 12},{"name": "Lily","age": 14}]