成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

JS中的數(shù)組去重方法總結(jié)

Aldous / 754人閱讀

摘要:第一種常規(guī)法最直觀的思路創(chuàng)建一個(gè)新數(shù)組如果新數(shù)組中已經(jīng)包含了當(dāng)前的第個(gè)元素,那么跳過否則把當(dāng)前項(xiàng)到新數(shù)組中輸出這種方法用到了方法。特殊情況當(dāng)數(shù)組中既有數(shù)字又有字符串的時(shí)候,如此時(shí)希望和都保留,那么上述的方法無法達(dá)到要求。

第一種:常規(guī)法(最直觀的思路)

function unique(arr){
    var n = []; //創(chuàng)建一個(gè)新數(shù)組
    for(var i = 0; i < arr.length; i++) {
    //如果新數(shù)組中已經(jīng)包含了當(dāng)前的第i個(gè)元素,那么跳過
        if (n.indexOf(arr[i]) == -1) {
    //否則把當(dāng)前項(xiàng)push到新數(shù)組中
            n.push(arr[i]);
        }
    }
    return n;
}
var array = [4,2,4,6,1,2,4,7,8];
console.log(unique(array)); //輸出[4,2,6,1,7,8]

這種方法用到了indexOf方法。其目的是尋找參數(shù)在數(shù)組中第一次出現(xiàn)的位置。很顯然,js引擎在實(shí)現(xiàn)這個(gè)方法的時(shí)候會(huì)遍歷數(shù)組直到找到目標(biāo)為止。所以此函數(shù)會(huì)浪費(fèi)掉很多時(shí)間,效率并不高。

第二種:hash()表

function unique(arr){
    var n = [];
    var hash = {};
    for(var i = 0; i < arr.length; i++){
        if (!hash[arr[i]])
        {
            hash[arr[i]] = 1;
            n.push(arr[i])
        }
    }
    return n;    
}
var array = [4,2,4,6,1,2,4,7,8];
console.log(unique(array));//輸出[4,2,6,1,7,8]

當(dāng)for循環(huán)遍歷數(shù)組時(shí),每次取出一個(gè)元素與hash表中的對(duì)象進(jìn)行對(duì)比,如果這個(gè)元素不重復(fù),則把它存放到結(jié)果數(shù)組中,同時(shí)把這個(gè)元素的內(nèi)容作為對(duì)象的一個(gè)屬性,并賦值為1,存入到hash表中。

第三種:先排序在比較相鄰元素

function unique(arr){
    arr.sort();
    var n = [arr[0]];
    for(var i = 1; i < arr.length; i++){
        if(arr[i] !== n[n.length-1]){
            n.push(arr[i]);
        }
    }
    return n;
}
var array = [4,2,4,6,1,2,4,7,8];
console.log(unique(array)); //輸出[1,2,4,6,7,8]

排序的時(shí)候用的JS原生的sort方法,JS引擎內(nèi)部用的快速排序。最終測(cè)試的結(jié)果是此方法運(yùn)行時(shí)間比上面兩種都快了不少。

特殊情況:
當(dāng)數(shù)組中既有數(shù)字又有字符串的時(shí)候,如:var arr = [4,2,4,6,1,"2",4,7,8],此時(shí)希望2和"2"都保留,那么上述的方法無法達(dá)到要求。

第四種:

function unique(arr){
    var n = [];
    var hash = {};
    for(var i = 0; i < arr.length; i++){
        if (!hash[typeof(arr[i])+arr[i]])
        {
            hash[typeof(arr[i])+arr[i]] = 1;
            n.push(arr[i])
        }
    }
    return n;    
}
var array = [4,2,4,6,1,"2",4,7,8];
console.log(unique(array));//輸出[4,2,6,1,"2",7,8]

在 JavaScript 里,對(duì)象的鍵值只能是字符串,因此需要 typeof(arr[i])+arr[i] 來區(qū)分?jǐn)?shù)值 2 和字符串 "2" 的情況。

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/80261.html

相關(guān)文章

  • js數(shù)組去重方法總結(jié)

    摘要:注方法可以返回某個(gè)指定字符串在字符串中首次出現(xiàn)的位置比如首次出現(xiàn)的位置是數(shù)組中的第一個(gè),即下標(biāo)為遍歷數(shù)組使用標(biāo)識(shí)符去重聲明一個(gè)變量標(biāo)識(shí)排序后遍歷過濾數(shù)組思路先給數(shù)組排序,這樣相同的項(xiàng)總是相鄰。 假設(shè)我們有數(shù)組arr,并且聲明新數(shù)組hash用來存放去重后的元素: var arr = [23,44,5,2,23,5,1,7,8,7]; //包含重復(fù)元素 var hash= [];...

    snowLu 評(píng)論0 收藏0
  • JS數(shù)組去重方法小結(jié)

    摘要:數(shù)組去重看了網(wǎng)上很多數(shù)組去重方法,用的比較常見的大概就幾種,今天想自己來做一個(gè)總結(jié)。還有就是方法返回的數(shù)組也是排序后的數(shù)組,某些情況下可能不符合要求。 JS數(shù)組去重 看了網(wǎng)上很多數(shù)組去重方法,用的比較常見的大概就幾種,今天想自己來做一個(gè)總結(jié)。部分內(nèi)容參考該博客 1 . 在原數(shù)組上操作(基本方法) 思路:利用循環(huán)嵌套,判斷數(shù)組中每個(gè)元素與其后面的元素是否相等,如果相等,就使用spli...

    PascalXie 評(píng)論0 收藏0
  • JS專題之數(shù)組去重

    摘要:將元素作為對(duì)象的鍵,默認(rèn)鍵對(duì)應(yīng)的值為如果對(duì)象中沒有這個(gè)鍵,則將這個(gè)元素放入結(jié)果數(shù)組中去。 前言 數(shù)組去重在日常開發(fā)中的使用頻率還是較高的,也是網(wǎng)上隨便一抓一大把的話題,所以,我寫這篇文章目的在于歸納和總結(jié),既然很多人都在提的數(shù)組去重,自己到底了解多少呢。又或者是如果自己在開發(fā)中遇到了去重的需求,自己能想到更好的解決方案嗎。 這次我們來理一理怎么做數(shù)組去重才能做得最合適,既要考慮兼容性,...

    only_do 評(píng)論0 收藏0
  • JS數(shù)組去重總結(jié)

    摘要:數(shù)組去重,一般會(huì)在面試的時(shí)候才會(huì)碰到,要求手寫數(shù)組去重方法的代碼。在實(shí)際項(xiàng)目中碰到的數(shù)組去重,一般都是后臺(tái)去處理,很少讓前端處理數(shù)組去重。數(shù)組去重的方法一利用去重中最常用如果不考慮兼容性,這種去重的方法代碼最少。 數(shù)組去重,一般會(huì)在面試的時(shí)候才會(huì)碰到,要求手寫數(shù)組去重方法的代碼。如果是被提問到,數(shù)組去重的方法有哪些?你能答出其中的10種,面試官很有可能對(duì)你刮目相看。 在實(shí)際項(xiàng)目中碰到的...

    whinc 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<