js数组去重的方法
js数组去重的几种常用的方法
1.利用两层循环
判断每个位置上的元素与之后元素是否相同,相同的话使用splice()方法删除。
var arr = [1,2,2,3,3,3,'a','b','b','c','c','c'];
for(var i=0,len=arr.length-1;i<len;i++){
for(var j=i+1,len=arr.length;j<len;j++){
if(arr[i]==arr[j]){
arr.splice(j,1);//如果有重复的元素将其删除
j--;//由于少了一个元素 数组下标往前退一个
}
}
}
console.log(arr);//[1, 2, 3, "a", "b", "c"]
2.使用indexOf()方法去除重复的元素。
数组中的indexOf()方法,传入要查找的元素,返回值为首个被找到的元素在数组中的索引位置,若没有找到则返回 -1。
var arr = [1,2,2,3,3,3,'a','b','b','c','c','c'];
var newArr = [];
for(var i=0,len=arr.length;i<len;i++){
if(newArr.indexOf(arr[i]) == -1){
newArr.push(arr[i]);
}
}
console.log(newArr);//[1, 2, 3, "a", "b", "c"]
3.使用filter
filter()用于把Array的某些元素过滤掉,然后返回剩下的元素。它接收一个函数,然后把传入的函数依次作用于每个元素,然后根据返回值是true还是false决定保留还是丢弃该元素。
filter()接收回调函数时,回调函数可以接收三个参数,第一个参数表示Array的某个元素,第二个表示元素的位置,第三个表示数组本身。
去除重复元素依靠的是indexOf总是返回第一个元素的位置,后续的重复元素位置与indexOf返回的位置不相等,因此被filter滤掉了
var newArr, arr = [1,2,2,3,3,3,'a','b','b','c','c','c'];
newArr = arr.filter(function (element, index, self) {
return self.indexOf(element) === index;
});
console.log(newArr);//[1, 2, 3, "a", "b", "c"]
4.使用set与Array.from()
这两个东西在es6中新增的,Set是新的数据结构 ,它类似于数组,但是成员的值都是唯一的,没有重复的值。Array.from方法可以将 Set 结构转为数组。
var arr = [1,2,2,2,3,3,null,null];
var newArr = Array.from(new Set(arr));
console.log(newArr);//[1,2,3,null]
set可以接受一个数组或一个类数组对象,自动去重其中的重复元素,但返回的是一个对象,并不是我们想要的数组,所以Arrayy.from()它的作用是将类数组对象转化为数组,所以就有了上面的数组去重方法