數(shù)組去重

在實際工作或面試中,我們經(jīng)常會遇到“數(shù)組去重”問題容客,接下來是我總結(jié)的一些實現(xiàn)的數(shù)組去重的多種方法:

1.將數(shù)組的每一個元素依次與其他元素做比較凛驮,發(fā)現(xiàn)重復元素棒假,利用數(shù)組方法splice()刪除重復元素

var arr = [1,23,1,1,1,3,23,5,6,7,9,9,8,5,5,5,5];
function norepeat(arr) {
    for(var i = 0; i < arr.length-1; i++){
        for(var j = i+1; j < arr.length; j++){
            if(arr[i]==arr[j]){
                arr.splice(j,1); 
                j--;
            }
        }
    }
    return arr;
}
var arr2 = norepeat(arr);
console.log(arr2);    //[1, 23, 3, 5, 6, 7, 9, 8]

2.使用雙層循環(huán)改變原數(shù)組

// var arr = [1,1,2,2,3,3,4,4,5,5,4,3,1,2,6,6,6,6];
// console.log(arr); 
// function norepeat(arr){
//     for(var i=0;i<arr.length;i++){
//         for(var j=0;j<arr.length;j++){
//             if(arr[i] == arr[j] && i !=j){
//                 arr.splice(j,1);
//             }
//         }
//     }
//     return arr;
// }   
// var arr2=norepeat(arr);
// console.log(arr2);  //[1, 2, 3, 4, 5, 6]

3.借助新數(shù)組,判斷新數(shù)組中是否存在該元素如果不存在則將此元素添加到新數(shù)組中(原數(shù)組長度不變但被按字符串順序排序

//     var arr = [1,23,1,1,1,3,23,5,6,7,9,9,8,5];
//     console.log(arr); 
//     function norepeat(arr){
//         var temp=[];
//         var end;       //臨時變量用于對比重復元素
//         arr.sort();
//         end=arr[0];
//         temp.push(arr[0]);
//         for(var i=1;i<arr.length;i++){
//             if(arr[i] !=end){   //當前元素如果和臨時元素不等則將此元素添加到新數(shù)組中
//                 temp.push(arr[i])
//                 end=arr[i]
//             }
//         }
//         return temp;
//     }
// var arr2=norepeat(arr);
// console.log(arr2);   //[1, 23, 3, 5, 6, 7, 8, 9]

4.創(chuàng)建一個新數(shù)組烂瘫,判斷新數(shù)組中是否存在該元素如果不存在則將此元素添加到新數(shù)組中

//     var arr = [1,23,1,1,1,3,23,5,6,7,9,9,8,5];
//     console.log(arr); 
//     function norepeat(arr){
//         var temp =[];
//         for(var i=0;i<arr.length;i++){
//             if(temp.indexOf(arr[i]) == -1){
//                 temp.push(arr[i]);
//             }
//         }
//         return temp;
//     }
// var arr2=norepeat(arr);
// console.log(arr2);//[1, 23, 3, 5, 6, 7, 9, 8]

5.借助indexOf()方法判斷此元素在該數(shù)組中首次出現(xiàn)的位置下標與循環(huán)的下標是否相等

var arr = [1,23,1,1,1,3,23,5,6,7,9,9,8,5,5,5];
console.log(arr);    
function norepeat(arr) {
    for (var i = 0; i < arr.length; i++) {
        if (arr.indexOf(arr[i]) != i) {
            arr.splice(i,1);//刪除數(shù)組元素后數(shù)組長度減1后面的元素前移
            i--;//數(shù)組下標回退
        }
    }
    return arr;
}
var arr2 = norepeat(arr);
console.log(arr2);                //[1, 23, 3, 5, 6, 7, 9, 8]

6.創(chuàng)建一個新數(shù)組 通過indexOf方判斷當前元素在數(shù)組中的索引如果與循環(huán)的下標相等則添加到新數(shù)組中

var arr = [1,23,1,1,1,3,23,5,6,7,9,9,8,5,5,5];
console.log(arr);
function norepeat(arr){
    var temp=[];
    for(var i=0;i<arr.length;i++){
        if(arr.indexOf(arr[i]) == i){
            temp.push(arr[i]);
        }
    }
    return temp;
}
var arr2=norepeat(arr);
console.log(arr2);    //[1, 23, 3, 5, 6, 7, 9, 8]

7.利用數(shù)組中的filter方法

  var arr = ["apple","banana","pear","apple","orange","orange"];
console.log(arr);
var arr2 =arr.filter(function(value,index,self){
    return self.indexOf(value) ===index;
});
console.log(arr2);   //["apple", "banana", "pear", "orange"]

8.利用空對象來記錄新數(shù)組中已經(jīng)存儲過的元素

// var arr = [1,23,1,1,1,3,23,5,6,7,9,9,8,5,5,5];
// console.log(arr);
// var obj={};
// var arr2=[];
// for(var i=0;i<arr.length;i++){
//     if(!obj[arr[i]]){
//         obj[arr[i]]=true;
//         arr2.push(arr[i]);
//     }
// }
// console.log(arr2);   //[1, 23, 3, 5, 6, 7, 9, 8]

9.借助兩個新數(shù)組

//     var arr = [1,1,2,2,3,3,4,4,5,5,4,3,2,1,1,1];
//     console.log(arr);
//     var arr2=[];
//     for(var i=0;i<arr.length;i++){
//         var arr3=[]; //接收重復數(shù)據(jù)后面的下標
//         //內(nèi)層循環(huán)找出有重復數(shù)據(jù)的下標
//         for( var j=i+1;j<arr.length;j++){
//             if(arr[i] == arr[j]){
//                 arr3.push(j); //找出后面重復數(shù)據(jù)的下標
//             }
//         }
//         // console.log(arr3);
//         if(arr3.length == 0){ //若重復數(shù)組沒有值說明其不是重復數(shù)據(jù)
//             arr2.push(arr[i]);
//         }
//     }
//     console.log(arr2);  //[5, 4, 3, 2, 1]

10.此方法沒有借助新數(shù)組直接改變原數(shù)組,并且去重后的數(shù)組被排序

// var arr = [1,23,1,1,1,3,23,5,6,7,9,9,8,5];
// console.log(arr); 
// function norepeat(arr){
//     var temp;
//     arr.sort();
//     temp=arr[0];
//     for(var i=1;i<arr.length;i++){
//         if(arr[i]==temp){   //當前元素如果和臨時元素相等則將此元素從數(shù)組中刪除
//             arr.splice(i,1);
//             i--;
//         }else{
//             temp=arr[i];
//         }
//     }
//     return arr;
// }
// var arr2=norepeat(arr);
// console.log(arr2);   //[1, 23, 3, 5, 6, 7, 8, 9]

數(shù)組去重的方法其實不難媒熊,但是思路卻是特別重要。以上是我所知道的一些方法坟比,如果有錯或者更好方法可以分享出來芦鳍,謝謝。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末葛账,一起剝皮案震驚了整個濱河市柠衅,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌注竿,老刑警劉巖茄茁,帶你破解...
    沈念sama閱讀 212,454評論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異巩割,居然都是意外死亡裙顽,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,553評論 3 385
  • 文/潘曉璐 我一進店門宣谈,熙熙樓的掌柜王于貴愁眉苦臉地迎上來愈犹,“玉大人,你說我怎么就攤上這事闻丑′鲈酰” “怎么了?”我有些...
    開封第一講書人閱讀 157,921評論 0 348
  • 文/不壞的土叔 我叫張陵嗦嗡,是天一觀的道長勋锤。 經(jīng)常有香客問我,道長侥祭,這世上最難降的妖魔是什么叁执? 我笑而不...
    開封第一講書人閱讀 56,648評論 1 284
  • 正文 為了忘掉前任茄厘,我火速辦了婚禮,結(jié)果婚禮上谈宛,老公的妹妹穿的比我還像新娘次哈。我一直安慰自己,他們只是感情好吆录,可當我...
    茶點故事閱讀 65,770評論 6 386
  • 文/花漫 我一把揭開白布窑滞。 她就那樣靜靜地躺著,像睡著了一般恢筝。 火紅的嫁衣襯著肌膚如雪哀卫。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,950評論 1 291
  • 那天滋恬,我揣著相機與錄音聊训,去河邊找鬼。 笑死恢氯,一個胖子當著我的面吹牛带斑,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播勋拟,決...
    沈念sama閱讀 39,090評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼勋磕,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了敢靡?” 一聲冷哼從身側(cè)響起挂滓,我...
    開封第一講書人閱讀 37,817評論 0 268
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎啸胧,沒想到半個月后赶站,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,275評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡纺念,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,592評論 2 327
  • 正文 我和宋清朗相戀三年贝椿,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片陷谱。...
    茶點故事閱讀 38,724評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡烙博,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出烟逊,到底是詐尸還是另有隱情渣窜,我是刑警寧澤,帶...
    沈念sama閱讀 34,409評論 4 333
  • 正文 年R本政府宣布宪躯,位于F島的核電站乔宿,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏访雪。R本人自食惡果不足惜详瑞,卻給世界環(huán)境...
    茶點故事閱讀 40,052評論 3 316
  • 文/蒙蒙 一囤官、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧蛤虐,春花似錦、人聲如沸肝陪。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,815評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽氯窍。三九已至饲常,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間狼讨,已是汗流浹背贝淤。 一陣腳步聲響...
    開封第一講書人閱讀 32,043評論 1 266
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留政供,地道東北人播聪。 一個月前我還...
    沈念sama閱讀 46,503評論 2 361
  • 正文 我出身青樓,卻偏偏與公主長得像布隔,于是被迫代替她去往敵國和親离陶。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 43,627評論 2 350

推薦閱讀更多精彩內(nèi)容

  • js去重的幾種方法: 1.使用indexOf()方法---[a.檢查當前數(shù)組是否存在;b.比較數(shù)組的下標---(借...
    LuckyS007閱讀 662評論 0 3
  • 在實際工作或面試中,我們經(jīng)常會遇到“數(shù)組去重”問題,接下來就是使用js實現(xiàn)的數(shù)組去重的多種方法: 1.將數(shù)組的每一...
    潛水的旱鴨子閱讀 7,137評論 1 37
  • 1.遍歷數(shù)組法 最簡單的去重方法蜕衡,實現(xiàn)思路:新建一新數(shù)組阿逃,遍歷傳入數(shù)組,值不在新數(shù)組就加入該新數(shù)組中拓春;注意點:判斷...
    persistlu閱讀 250評論 0 1
  • 面試中js原生命中率特別高,其中數(shù)組又是重中之重,關(guān)于數(shù)組去重谎倔,總結(jié)了一下幾種方法,僅供參考淘衙,歡迎批評指正 方法一...
    b9760a805daa閱讀 476評論 0 0
  • 今天來聊一聊JS數(shù)組去重的一些方法传藏,包括一些網(wǎng)上看到的和自己總結(jié)的,總共5種方法(ES5)彤守。 第一種:遍歷數(shù)組法 ...
    w_zhuan閱讀 430評論 0 1