方法一:使用 filter()
方法和 find()
方法
const array1 = [{id: 1, name: 'Alice'}, {id: 2, name: 'Bob'}, {id: 3, name: 'Charlie'}];
const array2 = [{id: 2, name: 'Bob'}, {id: 4, name: 'David'}, {id: 5, name: 'Edward'}];
// 使用 filter() 方法和 find() 方法提取出 array1 中不在 array2 中存在的对象
const uniqueObjects = array1.filter(obj1 => !array2.find(obj2 => obj1.id === obj2.id));
console.log('array1 中不在 array2 中存在的对象为:', uniqueObjects);
在这个示例中,我们使用 filter() 方法和 find() 方法来提取出 array1 中不在 array2 中存在的对象。通过判断 obj1.id 是否等于 obj2.id 来比较两个对象。
输出结果将是 array1 中不在 array2 中存在的对象数组,即 [{id: 1, name: 'Alice'}, {id: 3, name: 'Charlie'}]。
方法二:使用 reduce()
方法和自定义比较函数
const array1 = [{id: 1, name: 'Alice'}, {id: 2, name: 'Bob'}, {id: 3, name: 'Charlie'}];
const array2 = [{id: 2, name: 'Bob'}, {id: 4, name: 'David'}, {id: 5, name: 'Edward'}];
// 自定义比较函数
function compareObjects(obj1, obj2) {
return obj1.id === obj2.id;
}
// 使用 reduce() 方法和自定义比较函数提取出 array1 中不在 array2 中存在的对象
const uniqueObjects = array1.reduce((result, obj1) => {
if (!array2.some(obj2 => compareObjects(obj1, obj2))) {
result.push(obj1);
}
return result;
}, []);
console.log('array1 中不在 array2 中存在的对象为:', uniqueObjects);
方法三:使用 ES6 Set 数据结构
const array1 = [{id: 1, name: 'Alice'}, {id: 2, name: 'Bob'}, {id: 3, name: 'Charlie'}];
const array2 = [{id: 2, name: 'Bob'}, {id: 4, name: 'David'}, {id: 5, name: 'Edward'}];
// 使用 Set 数据结构提取出 array1 中不在 array2 中存在的对象
const set1 = new Set(array1.map(obj => JSON.stringify(obj)));
const uniqueObjects = array2.filter(obj => !set1.has(JSON.stringify(obj)));
console.log('array1 中不在 array2 中存在的对象为:', uniqueObjects);
方法四:使用 filter() 跟 some()
const arrayA = [{id: 1, name: 'Alice'}, {id: 2, name: 'Bob'}, {id: 3, name: 'Charlie'}];
const arrayB = [{id: 2, name: 'Bob'}, {id: 4, name: 'David'}, {id: 5, name: 'Edward'}];
// 使用 filter() 方法提取出 arrayA 中不在 arrayB 中存在的对象
const uniqueObjects = arrayA.filter(objA => !arrayB.some(objB => objB.id === objA.id));
console.log('arrayA 中不在 arrayB 中存在的对象为:', uniqueObjects);