JavaScript 数组去重有多种方法,下面列举了一些常见的方式:
1. 使用 Set
Set 是 ES6 引入的一种数据结构,它只允许存储不重复的值。将数组转换为 Set 可以轻松去重,然后再转换回数组。
const arr = [1, 2, 2, 3, 4, 4, 5];
const uniqueArr = [...new Set(arr)];
2. 使用 filter
filter
方法可以用来创建一个新数组,其中包含满足某个条件的元素。通过检查元素的索引是否为第一次出现,可以实现去重。
const arr = [1, 2, 2, 3, 4, 4, 5];
const uniqueArr = arr.filter((value, index, self) => self.indexOf(value) === index);
3. 使用 reduce
reduce
方法可以用来迭代数组,并将元素累积到一个结果中。通过检查结果数组中是否已存在当前元素,可以实现去重。
const arr = [1, 2, 2, 3, 4, 4, 5];
const uniqueArr = arr.reduce((acc, value) => acc.includes(value) ? acc : [...acc, value], []);
4. 使用 indexOf
通过遍历数组并使用 indexOf
方法检查新数组中是否已包含当前元素,可以实现去重。
const arr = [1, 2, 2, 3, 4, 4, 5];
const uniqueArr = [];
for (let i = 0; i < arr.length; i++) {
if (uniqueArr.indexOf(arr[i]) === -1) {
uniqueArr.push(arr[i]);
}
}
5. 使用 includes
类似于使用 indexOf
,但使用 includes
方法可以提高代码的可读性。
const arr = [1, 2, 2, 3, 4, 4, 5];
const uniqueArr = [];
for (let i = 0; i < arr.length; i++) {
if (!uniqueArr.includes(arr[i])) {
uniqueArr.push(arr[i]);
}
}
6. 使用对象或 Map
通过创建一个对象或 Map,可以利用键的唯一性来去重数组。
const arr = [1, 2, 2, 3, 4, 4, 5];
const uniqueArr = [];
const seen = {};
for (let i = 0; i < arr.length; i++) {
if (!seen[arr[i]]) {
seen[arr[i]] = true;
uniqueArr.push(arr[i]);
}
}
7. 使用 reduce 和 includes
结合 reduce
和 includes
方法,可以创建一个去重的新数组。
const arr = [1, 2, 2, 3, 4, 4, 5];
const uniqueArr = arr.reduce((acc, value) => acc.includes(value) ? acc : [...acc, value], []);
8. 使用 reduce 和对象
利用对象的键唯一性,结合 reduce
方法,可以实现去重。
const arr = [1, 2, 2, 3, 4, 4, 5];
const uniqueArr = arr.reduce((acc, value) => {
if (!acc.hasOwnProperty(value)) {
acc[value] = true;
acc.push(value);
}
return acc;
}, []);
这些方法各有优缺点,选择哪种方法取决于具体的需求和场景。例如,使用 Set 是最简洁的方法,但如果需要考虑兼容性(如不支持 ES6 的环境),则可能需要选择其他方法。