前端面試題7----陣列去重
阿新 • • 發佈:2020-12-08
技術標籤:前端面試題jsjavascript
1.es6的Set物件去重
var arr=[1,2,2,3,4,5,5];
var set=new Set(arr);
var arr1 = Array.from(set);//從一個類似陣列或可迭代物件中建立一個新的陣列例項
/*var arr2 = arr1.sort(function(x,y){return x-y});//按從小到大的順序排序*/
console.log(arr1);//,1,2,3,4,5
2.利用物件的屬性去重
思路:利用物件的key值不重複實現,每次取出原陣列的元素,然後再物件中訪問這個屬性,如果存在就說明重複
var arr= [1,2,2,3,4,5,5];
function unique(arr){
var obj = {};
var res = [];
for (var i = 0; i < arr.length; i++) {
obj[arr[i]] = arr[i];
}
for (var i in obj) {
res.push(obj[i]); //i是key屬性,obj[i]是value值
}
return res;
}
console.log(unique(arr));//1,2,3,4,5
3.利用indexOf去重
思路:將去重的數組裡的元素和新數組裡的元素比較,如果indexOf返回-1則將元素放入新陣列
function uniq(array){
var temp = []; //一個新的臨時陣列
for(var i = 0; i < array.length; i++){
if(temp.indexOf(array[i]) == -1){//indexOf的值為-1說明找不到,即新數組裡沒有該元素
temp.push(array[i]);
}
}
return temp;
}
var aa = [1,2,2,4, 9,6,7,5,2,3,5,6,5];
console.log(uniq(aa));
4.排序後相鄰去重
思路:先將原陣列排序,在與相鄰的進行比較,如果不同則存入新陣列
var arr=[1,2,2,3,4,5,5];
function unique(arr){
var arr2 = arr.sort();//先通過sort排序
var res = [arr2[0]];//將arr2的第一個元素放入res
for(var i=1;i<arr2.length;i++){
//如果arr2[i]的值不等於res的最後一個元素的值,說明res裡沒有這個元素
if(arr2[i] !== res[res.length-1]){
res.push(arr2[i]);//將當前元素放入res
}
}
return res;
}
console.log(unique(arr));//1,2,3,4,5
5.陣列下標判斷
思路:如果當前陣列的第 i 項在當前陣列中第一次出現的位置不是 i,那麼表示第 i 項是重複的,忽略掉。否則存入結果陣列。
var arr=[1,2,2,3,4,5,5];
function unique(arr){
var res=[];
for(var i=0;i<arr.length;i++){
if(arr.indexOf(arr[i])==i){
res.push(arr[i]);
}
}
return res;
}
console.log(unique(arr));