实现数组去重的方法
# 实现数组去重的方法
# 功能描述
去除数组中的重复元素。
# 手写实现
# 思路一
双层 for 循环:先定义一个包含原始数组第一个元素的数组,然后遍历原始数组,将原始数组中的每个元素与新数组中的每个元素进行比对,如果不重复则添加到新数组中,最后返回新数组;因为它的时间复杂度是 O(n^2)
,如果数组长度很大,效率会很低。
function distinct(arr) {
for (let i = 0, len = arr.length; i < len; i++) {
for (let j = i + 1; j < len; j++) {
if (arr[i] == arr[j]) {
arr.splice(j, 1);
// splice 会改变数组长度,所以要将数组长度 len 和下标 j 减一
len--;
j--;
}
}
}
return arr;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
2
3
4
5
6
7
8
9
10
11
12
13
# 思路二
reduce 实现数组去重:利用高阶函数 reduce
进行去重,需要注意该函数的第二个参数 initialValue
得放一个空数组 []
,不然没法 push
。
function distinct(arr) {
return arr.reduce((acc, value) => {
if (!acc.includes(value)) {
acc.push(value);
}
return acc;
}, [])
}
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
# 思路三
ES6 中的 Set
去重:例如 ES6 中新的数据结构 Set,它的一个特性就是成员值都是唯一的,没有重复的值。
function distinct(arr) {
return [...new Set(arr)];
}
1
2
3
2
3
# 测试用例
let arr = [1, 2, 2, 3, 3, 3, 4, 5, 5];
console.log(distinct(arr));
// [1, 2, 3, 4, 5]
1
2
3
4
2
3
4
(完)