1. Set配合扩展操作符…或Array.from
var arr = [1,1,2,2,3,4,4];
var set = new Set(arr); //Set(4) {1, 2, 3, "a"}
var newArr = [...set];//(4) [1, 2, 3, 4],...扩展操作符内部用for of实现
var newArr2 = Array.from(set);//(4) [1, 2, 3, 4]
({}).toString.call(set); //"[object Set]"
2. filter
arr.filter(function(value,index,arr){
return arr.indexOf(value) === index;
})
3.利用对象
var arr=[1, 2, 3, 3, 3, '0', '1', '2', '测试', '重复', '重复', NaN, NaN, false, false];
var obj={};
var temp=[];
for(var i=0;i<arr.length;i++){
var type=Object.prototype.toString.call(arr[i]);
//console.log(type);
if(!obj[arr[i]+type]){
temp.push(arr[i]);
obj[arr[i]+type]=true;
}
}
console.log(temp);
4.先排序再去重
var arr=[1, 2, 3, 3, 3, '0', '1', '2', '测试', '重复', '重复', NaN, NaN, false, false];
arr.sort();
//console.log(arr);
var temp=[];
while(arr.length>0){
if(Object.is(arr[0],arr[1])){
arr.shift();
}else{
temp.push(arr.shift());
}
}
console.log(temp);
5.for in和includes
var arr=[1, 2, 3, 3, 3, '0', '1', '2', '测试', '重复', '重复', NaN, NaN, false, false];
var temp=[];
for(var i=0;i<arr.length;i++){
/*ES7中新增includes()方法,用于查找数组总是否包含某个元素,返回布尔值,接受两个参数 要查找的元素和 查找的起始位置*/
if(!temp.includes(arr[i])){
temp.push(arr[i]);
}
}
console.log(temp);