国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

JS中的數組去重方法總結

Aldous / 747人閱讀

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

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

function unique(arr){
    var n = []; //創建一個新數組
    for(var i = 0; i < arr.length; i++) {
    //如果新數組中已經包含了當前的第i個元素,那么跳過
        if (n.indexOf(arr[i]) == -1) {
    //否則把當前項push到新數組中
            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方法。其目的是尋找參數在數組中第一次出現的位置。很顯然,js引擎在實現這個方法的時候會遍歷數組直到找到目標為止。所以此函數會浪費掉很多時間,效率并不高。

第二種: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]

當for循環遍歷數組時,每次取出一個元素與hash表中的對象進行對比,如果這個元素不重復,則把它存放到結果數組中,同時把這個元素的內容作為對象的一個屬性,并賦值為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]

排序的時候用的JS原生的sort方法,JS引擎內部用的快速排序。最終測試的結果是此方法運行時間比上面兩種都快了不少。

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

第四種:

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 里,對象的鍵值只能是字符串,因此需要 typeof(arr[i])+arr[i] 來區分數值 2 和字符串 "2" 的情況。

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/80261.html

相關文章

  • js數組去重方法總結

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

    snowLu 評論0 收藏0
  • JS數組去重方法小結

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

    PascalXie 評論0 收藏0
  • JS專題之數組去重

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

    only_do 評論0 收藏0
  • JS數組去重總結

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

    whinc 評論0 收藏0

發表評論

0條評論

Aldous

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<