在JavaScript中创建一个包含没有重复值的子项的对象数组,可以通过多种方式实现。以下是一个详细的步骤和示例代码:
对象数组是由多个对象组成的数组,每个对象可以包含多个键值对。去重是指确保数组中的每个对象都是唯一的,通常通过比较对象的某个特定属性来实现。
假设我们有一个对象数组,每个对象包含一个id
属性,我们希望去除重复的id
。
// 原始对象数组
const originalArray = [
{ id: 1, name: 'Alice' },
{ id: 2, name: 'Bob' },
{ id: 1, name: 'Alice' }, // 重复项
{ id: 3, name: 'Charlie' }
];
// 使用Set和Map去重
function removeDuplicates(arr, key) {
const uniqueMap = new Map();
arr.forEach(item => {
if (!uniqueMap.has(item[key])) {
uniqueMap.set(item[key], item);
}
});
return Array.from(uniqueMap.values());
}
// 去重后的数组
const uniqueArray = removeDuplicates(originalArray, 'id');
console.log(uniqueArray);
Map
来存储唯一的键值对,键是对象的id
属性,值是对象本身。Map
中是否已经存在当前对象的id
。Map
中。Map
中的值转换为数组返回。在大数据集上,遍历和检查可能会很慢。
解决方法:
Set
结合对象属性。如果对象包含多个属性,且需要基于多个属性去重。
解决方法:
function removeDuplicatesComplex(arr, compareFn) {
const uniqueMap = new Map();
arr.forEach(item => {
const key = JSON.stringify(item); // 或者使用自定义的比较函数生成唯一键
if (!uniqueMap.has(key)) {
uniqueMap.set(key, item);
}
});
return Array.from(uniqueMap.values());
}
// 使用示例
const complexUniqueArray = removeDuplicatesComplex(originalArray, (a, b) => a.id === b.id && a.name === b.name);
console.log(complexUniqueArray);
通过这种方式,可以灵活地处理各种复杂的去重需求。
领取专属 10元无门槛券
手把手带您无忧上云