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

資訊專欄INFORMATION COLUMN

JavaScript數組去重

鄒強 / 2521人閱讀

摘要:數組去重的幾種方法遍歷數組法這是最簡單的數組去重方法,實現思路新建一新數組,傳入要去重的數組,遍歷該數組,若值不在新數組中則加入該數組需要注意點判斷值是否在數組的方法是方法,以下不支持,示例如下對象鍵值對法思路新建一對象以及數組,遍歷傳入

數組去重的幾種方法

1.遍歷數組法

這是最簡單的數組去重方法,實現思路:新建一新數組,傳入要去重的數組,遍歷該數組,若值不在新數組中則加入該數組;需要注意點:判斷值是否在數組的方法“indexOf”是ECMAScript5 方法,IE8以下不支持,示例如下:

function removeDup(arr) {
    let new_arr = [];
    arr.forEach((val) => {
        if(new_arr.indexOf(val) === -1){
            new_arr.push(val);
        }
    });
    return new_arr;
}

2.對象鍵值對法

思路:新建一對象以及數組,遍歷傳入的數組,判斷值是否為js對象的鍵,若不是則新增鍵值,并放入數組中;需要注意的地方:判斷是否為js對象鍵時,會自動對傳入的鍵toString();

    function removeDup2(arr) {
        let obj = {},
            new_arr = [],
            val,
            type;
        for(let i = 0, len = arr.length; i < len; i+=1) {
            val = arr[i];
            type = typeof val;
            if(!obj[val]) {
                obj[val] = [type];
                new_arr.push(val);
            }else if(obj[val].indexOf(type) === -1) {
                obj[val].push(type);
                new_arr.push(val);
            }
        }
        return new_arr;
    }
缺點:無法真正區分兩個對象,如:`{a:1}`和`{a: 2}`,因為typeof結果都是`"object"`,可用`JSON.stringify()`來解決;
es6優化后如下
    function unique(array) {
        let obj = {};
        let type;
        return array.filter((item, index, array) => {
            type = typeof item + JSON.stringify(item);
            return obj.hasOwnProperty(type) ? false : (obj[type] = item);
        } )
    }
    // 可去除undefined, NaN, Object重復項

3.排序后相鄰去除法

思路:首先將要去重的數組使用sort方法排序后,相同的值就會排在一起,然后就可以只判斷當前元素與上一個元素是否相同,若不同則添加進去;

    function unique(array) {
        let res = [];
        let sortedArray = array.slice(0).sort();//先排序
        let seen;//記錄上一個元素
        for(let i = 0, len = sortedArray.length; i < len; i++) {
            let current = sortedArray[i];
            if(!i || seen !== current) {
                res.push(current);
            }
            seen = current;
        }
        return res;
    }

優化:可傳入一個isSorted參數,表明該數組是否已排序,如果為true,那么就判斷相鄰元素是否相同;如果為false,則使用indexOf判斷:

    function unique(array, isSorted) {
        let res = [];
        let seen;//記錄上一個元素
        for(let i = 0, len = array.length; i < len; i++) {
            let current = array[i];
            if(isSorted) {
                if(!i || seen !== current) {
                    res.push(current);
                }
                seen = current;
            }else if(res.indexOf(current) === -1) {
                res.push(current);
            }
        }
        return res;
    }

再優化:想象一個場景,你需要對數組的每一項進行一些處理,但又不想再遍歷一次,那么可添加第三個參數itreatee,接受一個函數作為處理函數;

    function unique(array, isSorted, iteratee) {
        let res  = [];
        let seen = [];
        for(let i = 0, len = array.length; i < len; i++) {
            let value = array[i];
            let computed = iteratee ? iteratee(value, i, array) : value;
            if(isSorted) {
                if(!i || seen !== computed) {
                    res.push(value);
                }
                seen = computed;
            }else if(iteratee) {
                if(seen.indexOf(computed) === -1) {
                    res.push(value);
                    seen.push(computed);
                }
            }else if(res.indexOf(value) === -1) {
                res.push(value);
            }
        }
        return res;
    }

4.ES6,Set和Map去重

    function unique(array) {
        return Array.from(new Set(array));
    }

    //擴展運算符簡化
    let unique = (arr) => [...new Set(arr)];

    //使用Map
    function unique(array) {
        let seen = new Map();
        return arr.filter((a) => !seen.has(a) && seen.set(a, 1));
    }

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

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

相關文章

  • JS專題之數組去重

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

    only_do 評論0 收藏0
  • JavaScript專題之數組去重

    摘要:專題系列第三篇,講解各種數組去重方法,并且跟著寫一個前言數組去重方法老生常談,既然是常談,我也來談談。它類似于數組,但是成員的值都是唯一的,沒有重復的值。 JavaScript 專題系列第三篇,講解各種數組去重方法,并且跟著 underscore 寫一個 unique API 前言 數組去重方法老生常談,既然是常談,我也來談談。 雙層循環 也許我們首先想到的是使用 indexOf 來循...

    fsmStudy 評論0 收藏0
  • JavaScript數組去重(12種方法,史上最全)

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

    rozbo 評論0 收藏0
  • 也談面試必備問題之 JavaScript 數組去重

    摘要:而數組元素去重是基于運算符的。而如果有迭代函數,則計算傳入迭代函數后的值,對值去重,調用方法,而該方法的核心就是調用方法,和我們上面說的方法一異曲同工。 Why underscore (覺得這部分眼熟的可以直接跳到下一段了...) 最近開始看 underscore.js 源碼,并將 underscore.js 源碼解讀 放在了我的 2016 計劃中。 閱讀一些著名框架類庫的源碼,就好像...

    Coly 評論0 收藏0
  • javascript數組去重

    摘要:數組去重雙層循環使用雙層嵌套循環是最原始的方法用來存儲結果如果是唯一的,那么執行完循環,等于外層循環內層循環當和相等時,跳出循環。否則說明元素唯一,這時成立,將此元素添加到中。它類似于數組,但是成員的值都是唯一的,沒有重復的值。 JavaScript數組去重 雙層循環 使用雙層嵌套循環是最原始的方法: var array = [a,b,a]; function unique(arra...

    qylost 評論0 收藏0
  • <javaScript> 數組去重的方法總結(2017年)

    摘要:現在要求去重下面這個數組測試重復重復方法一測試重復重復去重后測試重復是新加的集合集合中的值不會重復。歡迎大家一起討論提出新的去重方法。有任何錯誤請在評論指出。 現在要求去重下面這個數組 [1, 2, 3, 3, 3, 0, 1, 2, 測試, 重復, 重復, NaN, NaN, false, false]; 方法一:ES6 Set() let arr = [1, 2, 3, 3, 3,...

    hightopo 評論0 收藏0

發表評論

0條評論

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