1.第一种方法:有一个需要去掉重复元素的数组arr,定义一个新数组res,循环遍历arr数组中的每一个元素,看res中是否存在,如果不存在,则push进去
function repeat(arr){
var res = [];
for(var i=0; i<arr.length; i++){
if(res.indexOf(arr[i]) == -1){
res.push(arr[i]);
}
}
}
repeat([1,3,5,7,9,12,15,21,34]);
2.利用对象属性去重:每次循环取出原数组的元素,看对象里面是否有这个键的值,如果有就说明重复
function repeat(arr){
var res = [];
var json = {};
for(var i=0; i<arr[i].length; i++){
if(!json[arr[i]]){
res.push(arr[i]);
json[arr[i]] = 1;
}
}
return res;
}
3.排序后去重:对需要去重的数组进行排序,然后相互比较,如果不同则存入新数组
function repeat(arr){
var arr2 = arr.sort();
var res = [arr2[0]];
for(var i=1; i<arr2.length; i++){
if(var i=1; i<arr2.length; i++){
if(arr[i]!==res[res.length-1]){
res.push(arr[i]);
}
}
}
}
4.es6中,set方法实现数组去重:在set里面就连不相等的NaN也都可以去重,这种方法虽然好,但是在IE系列不支持
var arr = [1,1,'1','1'];
console.log(new Set(arr));
//返回的事一个Set对象
Set(2)
size:2
_proto_:Set
[[Entries]]:Array(2)
0:1
1:'1'
那么我们想要的是一个数组,就需要用es6中另外一种方法,Array.from(),可以把对象转化为数组
var arr = [1,1,'1','1'];
var set = new Set(arr);
var newArr = Array.from(set);
console.log(newArr);
//Array(2)
0:1
1:'1'