在前端开发过程中,如果涉及到对象数组去重,我们首先要明确重复的标准,应为数组的每一项都是一个对象,而对象引用是基于内存地址的,就算是两个对象拥有两个相同的属性和值,它们也是不同的引用,所以我们确定以哪个属性值作为条件,来进行筛选,比如ID。
先封装一个去重的方法:
function removeDuplicateObjectsById(array, idKey) {
const seen = new Set();
const uniqueArray = array.filter(obj => {
return !seen.has(obj[idKey]) && seen.add(obj[idKey]);
});
return uniqueArray;
}
如果数组的两项的ID相同,则删除掉。
有一种情况是,如果我们需要对对象所有属性进行比较,那么需要将对象转为字符串,然后再比较:
function removeDuplicateObjectsById(array) {
const seen = new Set();
const uniqueArray = array.filter(obj => {
return !seen.has(JSON.stringify(obj)) && seen.add(JSON.stringify(obj));
});
return uniqueArray;
}
const objects = [
{ id: 1, name: 'Alice' },
{ id: 2, name: 'Bob' },
{ id: 1, name: 'Alice' }, // 与第一个对象重复(基于id)
{ id: 3, name: 'David' }
];
console.log(removeDuplicateObjectsById(objects))
在objects这个数组里面,第一项和第三项是相同的,所以删除第三项。
如果单纯对一个数组进行去重操作的话,也可以使用上面这个去重函数。