數組去重的方法

數組去重

  • 第一種方法:
  • 先對數組進行排序sort(),排好序,而後把數組的當前項和後一項進行比較,相同則使用數組的splice(相同的位置,1),可是爲了防止數組塌陷,每次刪除數組元素的時候要把i的值減一。
var ary=[1,23,4,2,33,1,2,44,3,2,3]
        ary.sort(function(a,b){
        return a-b;
        });//返回的是排好序的數組
    for(var i=0;i<ary.length;i++){
    if(ary[i]===ary[i+1])
    {
    ary.splice(i,1);
    i--;//爲了防止數組塌陷

        }

    }
  • 第二種方法是:創建一個新數組,要是原數組裏面的數是頭一次出現(使用數組的indexOf()),那麼就把這個數放到新數組裏面,否者就拋棄這個數,相似於前面說的隨機驗證碼
var ary=[1,23,4,2,33,1,2,44,3,2,3]

var arr2=[];
for(var i=0;i<ary.length;i++){ if(arr2.indexOf(art[i])==-1){ arr2.push(ary[i]); }
}
  • 第三種方法:直接拿當前項與後一項進行比較,相同的要刪除,使用數組splice()進行刪除,這裏也要防止數組塌陷;
var ary=[1,23,4,2,33,1,2,44,3,2,3]
for(var i=0;i<ary.length;i++){
for(var j=i+1;j<ary.length;j++){

if(ary[i]===ary[j]){
ary.splice(j,1);
j--;
}
}
}
  • 第四種方法:利用對象不重名的特性,對象的存儲是鍵值對方式,要獲取屬性值,要經過對象./[]屬性來獲取;相同則刪除,也要防止數組塌陷
var ary=[1,23,4,2,33,1,2,44,3,2,3]
//新建一個對象
var obj={};
for(var i=0;i<ary.length;i++){
var cur=ary[i];
//若是obj【cur】爲真,那就說明對象裏面找到了這個數,重複了
if(obj[cur]){
ary.splice(i,1);
i--;
}else{
//給對象賦值 說明obj.xxx=undefined 不存在爲假
obj[cur]=cur;//obj【1】=1;
}
}
  • 第五種方法:也是利用對象不重名的方法,可是此次是直接計算其數組各個數的重複次數,
var ary=[1,23,4,2,33,1,2,44,3,2,3]
var obj={};
for(var i=0;i<ary.length;i++){
 var cur=ary[i];
 if(obj[cur]){
 //每次重複一次,其對應的值加一
   obj[cur]++;
}else{
//說明沒有重複,個數只有一個
obj[cur]=1;
}
}
var ary2=[];
//對於對象使用in 方法進行遍歷,遍歷獲取的是屬性值
for(var attr in obj){
  ary2.push(Number(attr));
}

數組去重的面試題:

找出此次考試中,最高分,及最高分出現的次數javascript

//思路:所有人的成績是一個數組,這就至關於使用數組去重的方法,找到最高的分數,和其次數,首先找到了去重的數組進行從小到大的排序,獲得次數,而後經過最高分所對應的索引值獲得出現的最高分

var ary = [1, 23, 4, 2, 33, 1, 2, 44, 3, 2, 3];
            var obj = {};
            for(var i = 0; i < ary.length; i++) {
                //把數組的值,看成對象的索引賦值給對象,因此經過對象索引獲取的是數組出現的次數
                var cur = ary[i];
                if(obj[cur]) {
                    //每次重複一次,其對應的值加一
                    obj[cur]++;
                } else {
                    //說明沒有重複,個數只有一個
                    obj[cur] = 1;
                }
            }
            //分數從低到高出現的次數
            console.log(obj);

            var ary2 = [];
            //對於對象使用in 方法進行遍歷,遍歷獲取的是屬性值
            for(var attr in obj) {
                ary2.push(Number(attr));
            }

            console.log(ary2);
            //最高分
            console.log(ary2[ary2.length-1]);
            var count=ary2[ary2.length-1];
            //最高分出現的次數
            console.log(obj[count]);
相關文章
相關標籤/搜索