在编程中,比较对象数组并返回不在其中一个数组中的新对象数组通常涉及到集合操作。具体来说,这个过程可以分为以下几个步骤:
以下是一个使用JavaScript实现比较对象数组并返回不在其中一个数组中的新对象数组的示例:
function getUniqueObjects(arr1, arr2) {
const set1 = new Set(arr1.map(JSON.stringify));
const set2 = new Set(arr2.map(JSON.stringify));
const uniqueInArr1 = arr1.filter(item => !set2.has(JSON.stringify(item)));
const uniqueInArr2 = arr2.filter(item => !set1.has(JSON.stringify(item)));
return [...uniqueInArr1, ...uniqueInArr2];
}
// 示例数据
const arr1 = [{ id: 1, name: 'Alice' }, { id: 2, name: 'Bob' }];
const arr2 = [{ id: 2, name: 'Bob' }, { id: 3, name: 'Charlie' }];
const result = getUniqueObjects(arr1, arr2);
console.log(result);
// 输出: [{ id: 1, name: 'Alice' }, { id: 3, name: 'Charlie' }]
原因:JavaScript对象的属性顺序在不同环境下可能不同,导致JSON.stringify
的结果不一致。
解决方法:在比较对象之前,先对对象的属性进行排序。
function getUniqueObjects(arr1, arr2) {
const set1 = new Set(arr1.map(item => JSON.stringify(Object.keys(item).sort().reduce((acc, key) => { acc[key] = item[key]; return acc; }, {}))));
const set2 = new Set(arr2.map(item => JSON.stringify(Object.keys(item).sort().reduce((acc, key) => { acc[key] = item[key]; return acc; }, {}))));
const uniqueInArr1 = arr1.filter(item => !set2.has(JSON.stringify(Object.keys(item).sort().reduce((acc, key) => { acc[key] = item[key]; return acc; }, {}))));
const uniqueInArr2 = arr2.filter(item => !set1.has(JSON.stringify(Object.keys(item).sort().reduce((acc, key) => { acc[key] = item[key]; return acc; }, {}))));
return [...uniqueInArr1, ...uniqueInoret2];
}
通过这种方式,可以确保即使对象属性顺序不同,也能正确比较对象。
领取专属 10元无门槛券
手把手带您无忧上云