面值试中常会被问到的问题--数组去重方法,此处整理了6中方法,后续添加。
1、arr.filter()
var arr = [0,0,1,'a',1,2,'b','a','a'];
var res = arr.filter(function(ele,index,array){
return index === array.indexOf(ele);
});
document.write(res);
2、先排序再去重
function unique(arr) {
var arr2 = arr.sort();
console.log(arr2);
var res = [arr2[0]];
for(var i = 1; i < arr2.length; i++){
console.log(arr2[i]+','+res[res.length-1]);
console.log(res);
if(arr2[i] !== res[res.length-1]){
res.push(arr2[i]);
}
}
return res;
}
var arr3 = unique([0,0,1,'a',1,2,'b','a','a']);
document.write(arr3);
3、利用对象的属性去重
function unique(arr){
var res =[];
var json = {};
for(var i = 0; i < arr.length; i++){
if(!json[arr[i]]){
res.push(arr[i]);
json[arr[i]] = 1;
}
}
return res;
}
var arr3 = unique([0,0,1,'a',1,2,'b','a','a']);
document.write(arr3);
4、利用下标查询
function unique(arr){
var newArr = [arr[0]];
for(var i = 1; i < arr.length; i++){
if(newArr.indexOf(arr[i]) == -1){
newArr.push(arr[i]);
}
}
return newArr;
}
var arr3 = unique([0,0,1,'a',1,2,'b','a','a']);
document.write(arr3);
5、定义一个新数组,并存放原数组的第一个元素,然后将元素组一一和新数组的元素对比,若不同则存放在新数组中。
function unique(arr) {
var res = [arr[0]];
for(var i = 0; i < arr.length; i++){
var repeat = false;
for(var j = 0; j < res.length; j++){
if(arr[i] == res[j]){
repeat = true;
break;
}
}
if(!repeat){
res.push(arr[i]);
}
}
return res;
}
var arr2 = unique([0,0,1,'a',1,2,'b','a','a']);
document.write(arr2);
6、es6的set方法
const res = new Set();
var arr =[0,0,1,'a',1,2,'b','a','a'];
arr.forEach(x => res.add(x));
console.log(s);