数组去重的方法?

ES6 提供的最简方法–

1.扩展运算符+new Set()

1
2
3
const arr = [1, 3, 5, 2, 3, 8, 4, 3];
const res = [...new Set(arr)];
console.log(res); //[ 1, 3, 5, 2, 8, 4 ]

函数化写法

1
2
3
4
5
6
7
function unique(arr) {
//Set数据结构,它类似于数组,其成员的值都是唯一的
return Array.from(new Set(arr)); // 利用Array.from将Set结构转换成数组
}
var arr = [1, 2, 2, 3, 5, 3, 6, 5];
var res = unique(arr);
console.log(res);

1.indexOf 方法

新建一个数组,遍历要去重的数组,当值不在新数组的时候(indexOf 为 -1)就 push 到新数组中;

1
2
3
4
5
6
7
8
9
10
11
12
function unique(arr) {
var newArr = [];
for (var i = 0; i < arr.length; i++) {
if (newArr.indexOf(arr[i]) == -1) {
newArr.push(arr[i]);
}
}
return newArr;
}
var arr = [1, 2, 2, 3, 4, 4, 5, 1, 3];
var newArr = unique(arr);
console.log(newArr);

indexOf() 方法可返回数组中某个指定的元素位置。
该方法将从头到尾地检索数组,看它是否含有对应的元素。开始检索的位置在数组 start 处或数组的开头(没有指定 start 参数时)。如果找到一个 item,则返回 item 的第一次出现的位置。开始位置的索引为 0。
如果在数组中没找到指定元素则返回 -1。
提示如果你想查找字符串最后出现的位置,请使用lastIndexOf() 方法

1.利用对象的属性不能相同的特点进行去重

实现思路:

1.创建一个新的数组存放结果

2.创建一个空对象

3.for 循环时,每次取出一个元素与对象进行对比,如果这个元素不重复,则把它存放到结果数组中,同时把这个元素的内容作为对象的一个属性,并赋值为 1,存入到第 2 步建立的对象中。

说明:至于如何对比,就是每次从原数组中取出一个元素,然后到对象中去访问这个属性,如果能访问到值,则说明重复。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
function unique(arr){
var res = [];
var obj = {};
for(var i=0; i<arr.length; i++){
if( !obj[arr[i]] ){
obj[arr[i]] = 1;
res.push(arr[i]);
}
}
return res;
}
var arr = [1,2,2,3,5,3,6,5];
var res = unique(arr)
console.log(res );

参考:
https://www.cnblogs.com/gaosirs/p/10677221.html

https://www.jb51.net/article/118657.htm

由arguments属性浅谈JS函数重载与多态性 事件委托是什么?如何确定事件源?

评论

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×