1. 程式人生 > 其它 >前端面試題7----陣列去重

前端面試題7----陣列去重

技術標籤:前端面試題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));