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

資訊專欄INFORMATION COLUMN

JavaScript數(shù)組去重

鄒強(qiáng) / 2539人閱讀

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

數(shù)組去重的幾種方法

1.遍歷數(shù)組法

這是最簡單的數(shù)組去重方法,實(shí)現(xiàn)思路:新建一新數(shù)組,傳入要去重的數(shù)組,遍歷該數(shù)組,若值不在新數(shù)組中則加入該數(shù)組;需要注意點(diǎn):判斷值是否在數(shù)組的方法“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.對(duì)象鍵值對(duì)法

思路:新建一對(duì)象以及數(shù)組,遍歷傳入的數(shù)組,判斷值是否為js對(duì)象的鍵,若不是則新增鍵值,并放入數(shù)組中;需要注意的地方:判斷是否為js對(duì)象鍵時(shí),會(huì)自動(dòng)對(duì)傳入的鍵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;
    }
缺點(diǎn):無法真正區(qū)分兩個(gè)對(duì)象,如:`{a:1}`和`{a: 2}`,因?yàn)閠ypeof結(jié)果都是`"object"`,可用`JSON.stringify()`來解決;
es6優(yōu)化后如下
    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重復(fù)項(xiàng)

3.排序后相鄰去除法

思路:首先將要去重的數(shù)組使用sort方法排序后,相同的值就會(huì)排在一起,然后就可以只判斷當(dāng)前元素與上一個(gè)元素是否相同,若不同則添加進(jìn)去;

    function unique(array) {
        let res = [];
        let sortedArray = array.slice(0).sort();//先排序
        let seen;//記錄上一個(gè)元素
        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;
    }

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

    function unique(array, isSorted) {
        let res = [];
        let seen;//記錄上一個(gè)元素
        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;
    }

再優(yōu)化:想象一個(gè)場(chǎng)景,你需要對(duì)數(shù)組的每一項(xiàng)進(jìn)行一些處理,但又不想再遍歷一次,那么可添加第三個(gè)參數(shù)itreatee,接受一個(gè)函數(shù)作為處理函數(shù);

    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));
    }

    //擴(kuò)展運(yùn)算符簡化
    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));
    }

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

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/97961.html

相關(guān)文章

  • 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
  • JavaScript專題之數(shù)組去重

    摘要:專題系列第三篇,講解各種數(shù)組去重方法,并且跟著寫一個(gè)前言數(shù)組去重方法老生常談,既然是常談,我也來談?wù)劇K愃朴跀?shù)組,但是成員的值都是唯一的,沒有重復(fù)的值。 JavaScript 專題系列第三篇,講解各種數(shù)組去重方法,并且跟著 underscore 寫一個(gè) unique API 前言 數(shù)組去重方法老生常談,既然是常談,我也來談?wù)劇?雙層循環(huán) 也許我們首先想到的是使用 indexOf 來循...

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

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

    rozbo 評(píng)論0 收藏0
  • 也談面試必備問題之 JavaScript 數(shù)組去重

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

    Coly 評(píng)論0 收藏0
  • javascript數(shù)組去重

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

    qylost 評(píng)論0 收藏0
  • <javaScript> 數(shù)組去重的方法總結(jié)(2017年)

    摘要:現(xiàn)在要求去重下面這個(gè)數(shù)組測(cè)試重復(fù)重復(fù)方法一測(cè)試重復(fù)重復(fù)去重后測(cè)試重復(fù)是新加的集合集合中的值不會(huì)重復(fù)。歡迎大家一起討論提出新的去重方法。有任何錯(cuò)誤請(qǐng)?jiān)谠u(píng)論指出。 現(xiàn)在要求去重下面這個(gè)數(shù)組 [1, 2, 3, 3, 3, 0, 1, 2, 測(cè)試, 重復(fù), 重復(fù), NaN, NaN, false, false]; 方法一:ES6 Set() let arr = [1, 2, 3, 3, 3,...

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

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

0條評(píng)論

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