js数组去重的几种去重方式
在 JavaScript 中,可以使用多种方法对数组中的对象进行去重。通常情况下,需要根据对象的某个属性来判断是否重复。以下是几种常见的方法:
方法一:使用 filter 和 findIndex 方法
// 假设 arr 是包含对象的数组,每个对象有一个唯一的 id 属性
let arr = [
{ id: 1, name: 'Alice' },
{ id: 2, name: 'Bob' },
{ id: 1, name: 'Alice' }, // 重复的对象
{ id: 3, name: 'Charlie' }
];
let uniqueArray = arr.filter((obj, index, self) =>
index === self.findIndex((t) => (
t.id === obj.id
))
);
console.log(uniqueArray);
方法二:使用 Map 数据结构
let arr = [
{ id: 1, name: 'Alice' },
{ id: 2, name: 'Bob' },
{ id: 1, name: 'Alice' }, // 重复的对象
{ id: 3, name: 'Charlie' }
];
let seen = new Map();
let uniqueArray = arr.filter(obj => {
if (!seen.has(obj.id)) {
seen.set(obj.id, true);
return true;
}
return false;
});
console.log(uniqueArray);
方法三:使用 ES6 Set 数据结构
let arr = [
{ id: 1, name: 'Alice' },
{ id: 2, name: 'Bob' },
{ id: 1, name: 'Alice' }, // 重复的对象
{ id: 3, name: 'Charlie' }
];
let ids = new Set();
let uniqueArray = arr.filter(obj => !ids.has(obj.id) ? ids.add(obj.id) : false);
console.log(uniqueArray);
附增new Set()与new MaP()的用法
-
new Set()
用途:
Set 是一种集合,用于存储唯一值,即集合中的每个元素都是唯一的,不允许重复。
特点:
不像数组,Set 中的元素没有顺序,不能通过索引访问。
可以存储任意类型的值,包括基本类型和对象引用。
可以很方便地检查值是否存在于集合中,因为它保证值的唯一性。
- new Map()
用途:
Map 是一种键值对的集合,其中每个键唯一对应一个值,类似于对象,但有更灵活的键类型。
特点:
键可以是任意类型,包括基本类型、对象或者函数。
保留元素的插入顺序,可以通过键来访问对应的值。
可以通过 .set() 方法添加键值对,通过 .get() 方法获取值,通过 .delete() 方法删除键值对。