1.利用对象的属性名来存储不重复的元素或者说利用对象的属性名来筛选重复的元素
let arr = [0,2,2,3,4,5,3,3,5,4,'l','a','p','l','p','a'];
let obj = {};
let arrs = [];
let arrLength = arr.length;
for(let i = 0; i < arrLength; i++){
if(!obj[arr[i]]){//如果obj的属性名(arr[i]作为obj的属性名)不存在,即这是第一次遇见的元素(一个不重复的元素)
obj[arr[i]] = ‘lap’;//这个‘lap’可以随便设置成一个非空值,
arrs.push(arr[i]);//将这个元素加入到数组arrs中
}
}
console.log('arrs:',arrs);
因为obj这个对象的属性名存储了不重复元素,可以直接输出keys(obj)。但是如果你是在编辑器里面用console.log('keys(obj):',keys(obj));chrome会报错:keys is not defined.我的chrome版本是69,可能有点小bug,直接在chorme控制台输出console.log(keys(obj))是没有问题的。
2.利用数组的indexOf(),与第一种方法相比我觉得很相似,
indexOf() 方法可返回数组中某个指定的元素位置。
该方法将从头到尾地检索数组,看它是否含有对应的元素,如果有,则返回 元素第一次出现的位置,否则返回-1。开始检索的位置在数组的开头,也可以加参数改变起始的检索位置
let arr = [0,2,2,3,4,5,3,3,5,4,'l','a','p','l','p','a','x','x'];
let arrs = [];
let arrLength = arr.length;
for(let i = 0; i < arrLength; i++){
if(arrs.indexOf(arr[i]) < 0){//第一次检索到的元素是 -1,重复的元素是大于0的
arrs.push(arr[i]);//将这个元素加入到数组arrs中
}
}
console.log('arrs:',arrs);
这个方法的好处应该就是不需要像第一种方法定义一个空对象,这里使用了数组自带的indexOf(),
3.利用filter()函数
let arr = [0,2,2,3,4,5,3,3,5,4,'l','a','p','l','p','a','y','y'];
let arrs = arr.filter(function(ele,index,self){
return self.indexOf(ele) === index;
});
console.log(arrs);
4.利用ES6的Set数据结构,Set类似数组,但里面的元素不重复
let arr = [0,2,2,3,4,5,3,3,5,4,'l','a','p','l','p','a','z','z'];
let arrs = [...new Set(arr)];
console.log(arrs,arrs instanceof Array);
上面四种方法 ,个人觉得第四种方法最简洁方便。