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

資訊專欄INFORMATION COLUMN

數(shù)組去重的JavaScript實(shí)現(xiàn)

Imfan / 3027人閱讀

摘要:主要用到數(shù)組的方法。第一種方式是判斷數(shù)組中的第一索引號等于參數(shù)索引號,一般來說,如果數(shù)組元素重復(fù),除第一個元素外,所有重復(fù)元素的索引和該元素對應(yīng)的第一索引是不同的。

1.最簡方法

創(chuàng)建一個空的新數(shù)組,依次檢查舊數(shù)組的值是否存在于新數(shù)組中,如果不存在就push進(jìn)去。主要用到數(shù)組的indexOf方法。

            function arrUnique(arr){
                var newArr = [];
                for (i = 0; i < arr.length; i++){
                    if (newArr.indexOf(arr[i]) == -1){
                        newArr.push(arr[i]);
                    }
                }
                return newArr;
            }
            var arr = [1,2,3,4,5,3,2];
            console.log(arrUnique(arr));
2.對象屬性賦值1

通過將舊數(shù)組的值分別賦值給對象的屬性,由于對象屬性賦值時舊屬性會被新的同名屬性覆蓋,所以保證了數(shù)組(屬性)的單一性,最后通過for in將這些屬性push到新數(shù)組中。

        function arrUnique(arr){
            var obj = {};
            var newArr = [];
            arr.map(function(item){
                obj[item] = null;
            })
            for (var key in obj){
                newArr.push(Number(key));
            }
            return newArr;
        }
        var arr = [1,2,3,4,5,3,2];
        console.log(arrUnique(arr));
3 對象屬性賦值2

創(chuàng)建一個空數(shù)組和空對象,檢查舊數(shù)組的值是否作為對象的屬性存在,如果不存在就給這個對象添加數(shù)組值屬性,屬性值為1,并且把這個數(shù)組的值賦值給新數(shù)組。利用的原理還是對象屬性值會被覆蓋,也就是說是唯一的。下標(biāo)的引用要比用indexOf搜索數(shù)組快的多,所以該方法方法2快。此處的對象其實(shí)是一個哈希表,雖然速度快很多,但是內(nèi)存占用較大,也就是以空間換時間。

        function arrUnique(arr){
            var newArr = [];
            var obj = {};
            for (var i = 0; i < arr.length; i++){
                if (!obj[arr[i]]){
                    newArr.push(arr[i]);
                    obj[arr[i]]=1;
                }
            }
            return newArr;
        }
        var arr = [1,2,3,4,5,3,2];
        console.log(arrUnique(arr));
4 先使用數(shù)組的sort方法排序,節(jié)省空間且速度較快

先對原數(shù)組排序,然后判斷數(shù)組元素是否在新數(shù)組的最后一位,如果不是就push進(jìn)去。這種方法比單純循環(huán)要快很多,雖然沒有哈希表方式快,但是不占用較大空間。

            function arrUnique(arr){
                arr.sort();//快排
                var newArr = [];
                for(var i = 0; i < arr.length; i++){
                    if (arr[i] !== newArr[newArr.length - 1]){
                        newArr.push(arr[i]);
                    }
                }
                return newArr;
            }
            var arr = [1,2,3,4,5,3,2];
            console.log(arrUnique(arr));
5 來自評論區(qū)的善意

昨天發(fā)布該文之后,今天收到評論區(qū) 亦秋 的反饋,給出了兩種很簡潔的ES6去重方式。
1)第一種方式是判斷數(shù)組中的第一索引號等于參數(shù)索引號,一般來說,如果數(shù)組元素重復(fù),除第一個元素外,所有重復(fù)元素的索引和該元素對應(yīng)的第一索引是不同的。該處第一索引是指自左向右搜索到的第一個元素的索引號。

[1,2,3,4,5,3,2].filter((value, index, array) => array.indexOf(value) === index)

2)通過ES6的Set數(shù)據(jù)結(jié)構(gòu),該結(jié)構(gòu)類似于數(shù)組,但是不會出現(xiàn)重復(fù)元素,因此,只要基于原始數(shù)組創(chuàng)建Set結(jié)構(gòu),然后在數(shù)組內(nèi)部展開就成了單一元素?cái)?shù)組。

[...new Set([1,2,3,4,5,3,2])]

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

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

相關(guān)文章

  • JavaScript專題之數(shù)組去重

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

    fsmStudy 評論0 收藏0
  • javascript 數(shù)組重的6種思路

    摘要:但是這并不妨礙我們從思維拓展的角度出發(fā),看看去重可以用幾種思路去實(shí)現(xiàn)。首先是常規(guī)的雙層循環(huán)比對的思路實(shí)現(xiàn)定義一個變量表示當(dāng)前元素在中是否存在。依次對中的元素和原數(shù)組元素進(jìn)行比對。重點(diǎn)是保證碰撞的幾率小到比中大獎還小就可以了。 前端在日常開發(fā)中或多或少都會碰到有對數(shù)據(jù)去重的需求,實(shí)際上,像是lodash這些工具庫已經(jīng)有成熟完備的實(shí)現(xiàn),并且可以成熟地運(yùn)用于生產(chǎn)環(huán)境。但是這并不妨礙我們從思維...

    AlphaWallet 評論0 收藏0
  • [Javascript]數(shù)組重的三種實(shí)現(xiàn)方式

    摘要:方式使用獲取并刪除刪除數(shù)組的第一個元素,判斷這個元素是否還存在于數(shù)組中,如果存在則說明這個元素的是重復(fù)的如果不存在,進(jìn)行操作方式建立一個哈希表,通過對象屬性查詢?nèi)コ貜?fù)元素方式思路和方式類似,但是簡潔很多來源個人博客 方式1:使用shift()獲取并刪除刪除數(shù)組的第一個元素,判斷這個元素是否還存在于數(shù)組中,如果存在則說明這個元素的是重復(fù)的;如果不存在,進(jìn)行push()操作 functi...

    TZLLOG 評論0 收藏0
  • JavaScript數(shù)組重的總結(jié)

    摘要:數(shù)組去重方法的總結(jié)前言在中數(shù)組是比較常用的,本文中總結(jié)了下數(shù)組去重的幾種常用方法,如有問題,請指正。 JavaScript數(shù)組去重方法的總結(jié) 前言 在JavaScript中數(shù)組是比較常用的,本文中總結(jié)了下數(shù)組去重的幾種常用方法,如有問題,請指正。 簡單粗暴的一種,ES6中set方法: var arr = [1,2,2,3,3,4,5,5]; console.log([...new Se...

    Tonny 評論0 收藏0
  • JavaScript數(shù)組重的6種算法

    摘要:否則存入結(jié)果數(shù)組。否則存入結(jié)果數(shù)組排序后相鄰去除法雖然原生數(shù)組的方法排序結(jié)果不怎么靠譜,但在不注重順序的去重里該缺點(diǎn)毫無影響。實(shí)現(xiàn)思路給傳入數(shù)組排序,排序后相同值相鄰,然后遍歷時新數(shù)組只加入不與前一值重復(fù)的值。 1.遍歷數(shù)組法 實(shí)現(xiàn)思路:新建一新數(shù)組,遍歷傳入數(shù)組,值不在新數(shù)組就加入該新數(shù)組中;注意點(diǎn):判斷值是否在數(shù)組的方法indexOf是ECMAScript5 方法,IE8以下不支持...

    Panda 評論0 收藏0

發(fā)表評論

0條評論

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