JavaScript數(shù)組去重方法合集

一、方法

方法一:先進(jìn)行原數(shù)組升序排序买决,然后對(duì)比相鄰元素

Array.prototype.distinct1 = function () {
    console.time('distinct1');       //測(cè)試性能的相關(guān)代碼
    var temp = this.sort(function (a, b) {
        return a-b;
    });
    var res = [temp[0]];
    for(var i=0; i<temp.length;i++){
        if(temp[i] !== res[res.length-1]){
            res.push(temp[i]);
        }
    }
    console.timeEnd('distinct1');
    console.log(res);
};

方法二:利用對(duì)象屬性唯一性

Array.prototype.distinct2 = function () {
    console.time('distinct2');        //測(cè)試性能的相關(guān)代碼
    var res=[],obj={};
    for(var i=0; i<this.length;i++){
        if(!obj[this[i]]){
            res.push(this[i]);
            obj[this[i]]=1;
        }
    }
    console.timeEnd('distinct2');
    console.log(res);
};

方法三:利用數(shù)組indexOf方法

Array.prototype.distinct3 = function () {
    console.time('distinct3');        //測(cè)試性能的相關(guān)代碼
    var res=[];
    for(var i=0; i<this.length;i++){
        if(res.indexOf(this[i])===-1){
            res.push(this[i]);
        }
    }
    console.timeEnd('distinct3');
    console.log(res);
};

方法四:利用數(shù)組includes方法

Array.prototype.distinct4 = function () {
    console.time('distinct4');        //測(cè)試性能的相關(guān)代碼
    var res=[];
    for(var i=0; i<this.length;i++){
        if(!res.includes(this[i])){
            res.push(this[i]);
        }
    }
    console.timeEnd('distinct4');
    console.log(res);
};

方法五:利用數(shù)組forEach限匣、includes方法

Array.prototype.distinct5 = function () {
    console.time('distinct5');        //測(cè)試性能的相關(guān)代碼
    var res=[];
    this.forEach(function (value) {
        if(!res.includes(value)){
            res.push(value);
        }
    });
    console.timeEnd('distinct5');
    console.log(res);
};

方法六:利用ES6 Set方法

Array.prototype.distinct6 = function () {
    console.time('distinct6');       //測(cè)試性能的相關(guān)代碼
    let res = Array.from(new Set(this))
    console.timeEnd('distinct6');
    console.log(res);
};

二晓褪、性能

var data = [];
for(var j=0;j<1000000;j++){
    data.push(Math.round(Math.random()*15));
}
data.distinct1(); // [ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 ]  221ms
data.distinct2(); // [ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 ]  5ms
data.distinct3(); // [ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 ]  19ms
data.distinct4(); // [ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 ]  20ms
data.distinct5(); // [ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 ]  44ms
data.distinct6(); // [ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 ]  77ms

三盟劫、總結(jié)

1饰迹、對(duì)比方法四、方法五醉锅,可知盡量少用forEach,而應(yīng)該用for循環(huán)代替。
2发绢、對(duì)比運(yùn)行時(shí)間硬耍,方法二所需時(shí)間最短,性能最優(yōu)边酒。
3经柴、有其他好的方法,歡迎大家在底下留言墩朦,我會(huì)補(bǔ)上去的坯认。


最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市氓涣,隨后出現(xiàn)的幾起案子牛哺,更是在濱河造成了極大的恐慌,老刑警劉巖劳吠,帶你破解...
    沈念sama閱讀 217,826評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件引润,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡痒玩,警方通過(guò)查閱死者的電腦和手機(jī)淳附,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,968評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)蠢古,“玉大人奴曙,你說(shuō)我怎么就攤上這事〔菅龋” “怎么了洽糟?”我有些...
    開(kāi)封第一講書(shū)人閱讀 164,234評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)到涂。 經(jīng)常有香客問(wèn)我脊框,道長(zhǎng),這世上最難降的妖魔是什么践啄? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,562評(píng)論 1 293
  • 正文 為了忘掉前任浇雹,我火速辦了婚禮,結(jié)果婚禮上屿讽,老公的妹妹穿的比我還像新娘昭灵。我一直安慰自己吠裆,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,611評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布烂完。 她就那樣靜靜地躺著试疙,像睡著了一般。 火紅的嫁衣襯著肌膚如雪抠蚣。 梳的紋絲不亂的頭發(fā)上祝旷,一...
    開(kāi)封第一講書(shū)人閱讀 51,482評(píng)論 1 302
  • 那天,我揣著相機(jī)與錄音嘶窄,去河邊找鬼怀跛。 笑死,一個(gè)胖子當(dāng)著我的面吹牛柄冲,可吹牛的內(nèi)容都是我干的吻谋。 我是一名探鬼主播,決...
    沈念sama閱讀 40,271評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼现横,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼漓拾!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起戒祠,我...
    開(kāi)封第一講書(shū)人閱讀 39,166評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤骇两,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后得哆,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體脯颜,經(jīng)...
    沈念sama閱讀 45,608評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,814評(píng)論 3 336
  • 正文 我和宋清朗相戀三年栋操,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了饱亮。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,926評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖葱绒,靈堂內(nèi)的尸體忽然破棺而出地淀,到底是詐尸還是另有隱情岖是,我是刑警寧澤实苞,帶...
    沈念sama閱讀 35,644評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站爷肝,受9級(jí)特大地震影響灯抛,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,249評(píng)論 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望偷线。 院中可真熱鬧声邦,春花似錦亥曹、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,866評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)乍丈。三九已至把将,卻和暖如春秸弛,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背叼屠。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,991評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工镜雨, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人挑宠。 一個(gè)月前我還...
    沈念sama閱讀 48,063評(píng)論 3 370
  • 正文 我出身青樓各淀,卻偏偏與公主長(zhǎng)得像碎浇,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子奴璃,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,871評(píng)論 2 354