面值试中常会被问到的问题--数组去重方法,此处整理了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);