欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

ES5 ES6中Array對象去除重復(fù)項的方法總結(jié)

 更新時間:2017年04月27日 14:18:49   作者:Microzz  
這篇文章主要給大家介紹了Array對象去除重復(fù)項的相關(guān)資料,文中通過示例代碼詳細介紹了在ES5和ES6中Array對象去除重復(fù)項的方法,需要的朋友可以參考借鑒,下面來一起看看吧。

輸入例子

[false, true, undefined, null, NaN, 0, 1, {}, {}, 'a', 'a', NaN].uniq()

輸出例子

[false, true, undefined, null, NaN, 0, 1, {}, {}, 'a']

分析

題目要求給 Array 添加方法,所以我們需要用到 prototype。數(shù)組去重本身算法不是很難,但是在 JavaScript 中很多人會忽視 NaN 的存在,因為在 JS 中 NaN !== NaN 。但是在去重中我們又不能保留兩個 NaN ,所以需要進行一下判斷,這是很多人容易忽視的。

ES5的實現(xiàn)如下:

代碼

Array.prototype.uniq = function () {
 var arr = [];
 var flag = true;
 this.forEach(function(item) {
 // 排除 NaN (重要?。?!)
 if (item != item) {
 flag && arr.indexOf(item) === -1 ? arr.push(item) : '';
 flag = false;
 } else {
 arr.indexOf(item) === -1 ? arr.push(item) : ''
 }
 });
 return arr;
}

驗證

我們只需要在數(shù)組上直接調(diào)用 uniq 方法就可以了,如:

[false, true, undefined, null, NaN, 0, 1, {}, {}, 'a', 'a', NaN].uniq()

結(jié)果為:

[false, true, undefined, null, NaN, 0, 1, {}, {}, 'a']

進階

ES6的實現(xiàn)

ES6新增了 Set 對象,也就是我們所說的“集合”,它類似于數(shù)組,但是成員的值都是唯一的,沒有重復(fù)的值。所以可以方便去重。

Set本身是一個構(gòu)造函數(shù),用來生成Set數(shù)據(jù)結(jié)構(gòu)。(詳看👉Set和Map數(shù)據(jù)結(jié)構(gòu))

如果用ES6為 Array 對象添加一個去除重復(fù)項的方法,則可以如下實現(xiàn):

Array.prototype.uniq = function() {
 return Array.from(new Set(this));
}

代碼中用 Array.from 把 Set 結(jié)構(gòu)轉(zhuǎn)換成數(shù)組,當(dāng)然,你也可以用其他方法,這里不深究。這里去重關(guān)鍵代碼只需要一行,是不是非常簡單?😄

如果你要優(yōu)雅一點,可以使用 ES6 的擴展運算符。如下:

Array.prototype.uniq = function() {
 return [...new Set(this)];
}

總結(jié)

以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家學(xué)習(xí)或者工作能帶來一定的幫助,如果有疑問大家可以留言交流,謝謝大家對腳本之家的支持。

相關(guān)文章

  • 關(guān)于js new Date() 出現(xiàn)NaN 的分析

    關(guān)于js new Date() 出現(xiàn)NaN 的分析

    在一個項目中需要進行日期的格式化,后臺傳到前端是時間的整數(shù)(Date.getTime),當(dāng)后臺數(shù)據(jù)返回字符串時,發(fā)現(xiàn)轉(zhuǎn)換日期時在ie下變成NaN,但是真的是這樣嗎?接下來我們慢慢分析
    2012-10-10
  • javascript密碼強度校驗代碼(兩種方法)

    javascript密碼強度校驗代碼(兩種方法)

    為了保證網(wǎng)站個人信息的安全,很多網(wǎng)站在注冊頁面都設(shè)置密碼強度這項,用javascript如何實現(xiàn)密碼強度校驗代碼呢?下面小編給大家整理了兩種方法使用javascript密碼強度校驗代碼,有需要的朋友可以參考下
    2015-08-08
  • Extjs 點擊復(fù)選框在表格中增加相關(guān)信息行

    Extjs 點擊復(fù)選框在表格中增加相關(guān)信息行

    這篇文章主要介紹了Extjs 點擊復(fù)選框在表格中增加相關(guān)信息行 的相關(guān)資料,非常不錯,具有參考借鑒價值,需要的朋友可以參考下
    2016-07-07
  • 使用javascript實現(xiàn)判斷當(dāng)前瀏覽器

    使用javascript實現(xiàn)判斷當(dāng)前瀏覽器

    這篇文章主要介紹了使用javascript實現(xiàn)判斷當(dāng)前瀏覽器的類型及版本,雖然不是很全面,但是還是推薦給大家,簡單學(xué)下方法和思路。
    2015-04-04
  • 淺談Javascript線程及定時機制

    淺談Javascript線程及定時機制

    這篇文章主要介紹了淺談Javascript線程及定時機制的相關(guān)資料,需要的朋友可以參考下
    2015-07-07
  • 200行代碼實現(xiàn)blockchain 區(qū)塊鏈實例詳解

    200行代碼實現(xiàn)blockchain 區(qū)塊鏈實例詳解

    這篇文章主要介紹了200行代碼實現(xiàn)blockchain 區(qū)塊鏈的相關(guān)知識,非常不錯,具有參考借鑒價值,需要的朋友參考下吧
    2018-03-03
  • JavaScript+Canvas實現(xiàn)簡單的柱狀圖

    JavaScript+Canvas實現(xiàn)簡單的柱狀圖

    這篇文章主要為大家詳細介紹了JavaScript如何利用Canvas實現(xiàn)繪制簡單的柱狀圖,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2023-10-10
  • JavaScript實現(xiàn)樓梯滾動特效(jQuery實現(xiàn))

    JavaScript實現(xiàn)樓梯滾動特效(jQuery實現(xiàn))

    這篇文章主要為大家詳細介紹了JavaScript實現(xiàn)樓梯滾動特效,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-09-09
  • 微信小程序?qū)崿F(xiàn)短信驗證碼倒計時

    微信小程序?qū)崿F(xiàn)短信驗證碼倒計時

    這篇文章主要為大家詳細介紹了微信小程序?qū)崿F(xiàn)短信驗證碼倒計時,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-05-05
  • 一起來學(xué)習(xí)TypeScript的類型

    一起來學(xué)習(xí)TypeScript的類型

    這篇文章主要為大家詳細介紹了TypeScript的類型,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-02-02

最新評論