去除數(shù)組重復(fù)元素(Array.from+Set)

Set

ES6 提供了新的數(shù)據(jù)結(jié)構(gòu) Set。它類(lèi)似于數(shù)組,但是成員的值都是唯一的,沒(méi)有重復(fù)的值。

Set 本身是一個(gè)構(gòu)造函數(shù),用來(lái)生成 Set 數(shù)據(jù)結(jié)構(gòu)。

// 例一
const set = new Set([1, 2, 3, 4, 4]);
[...set]
// [1, 2, 3, 4]

// 例二
const items = new Set([1, 2, 3, 4, 5, 5, 5, 5]);
items.size // 5

// 例三
function divs () {
  return [...document.querySelectorAll('div')];
}

const set = new Set(divs());
set.size // 56

// 類(lèi)似于
divs().forEach(div => set.add(div));
set.size // 56

Array.from()

Array.from方法用于將兩類(lèi)對(duì)象轉(zhuǎn)為真正的數(shù)組:類(lèi)似數(shù)組的對(duì)象(array-like object)和可遍歷(iterable)的對(duì)象(包括 ES6 新增的數(shù)據(jù)結(jié)構(gòu) Set 和 Map)。

下面是一個(gè)類(lèi)似數(shù)組的對(duì)象,Array.from將它轉(zhuǎn)為真正的數(shù)組。

let arrayLike = {
    '0': 'a',
    '1': 'b',
    '2': 'c',
    length: 3
};

// ES5的寫(xiě)法
var arr1 = [].slice.call(arrayLike); // ['a', 'b', 'c']

// ES6的寫(xiě)法
let arr2 = Array.from(arrayLike); // ['a', 'b', 'c']
Array.from('hello')
// ['h', 'e', 'l', 'l', 'o']

let namesSet = new Set(['a', 'b'])
Array.from(namesSet) // ['a', 'b']

值得提醒的是,擴(kuò)展運(yùn)算符(...)也可以將某些數(shù)據(jù)結(jié)構(gòu)轉(zhuǎn)為數(shù)組。

[...new Set(array)]

去除數(shù)組重復(fù)元素

[...new Set(array)]
Array.from(new Set(array));
非es6去重

1、時(shí)間復(fù)雜度o(n)

function fn(arr) {
        let obj = {};
        arr.forEach((item) => {
            obj[item] = '';//只保存最后出現(xiàn)的鍵為準(zhǔn),從而去重
        })
        return Object.keys(obj)
    }

2、時(shí)間復(fù)雜度o(n*n)

function fn(arr) {
           return arr.filter((item, index, arr) =>arr.indexOf(item) === index)     //第一次出現(xiàn)的的元素下標(biāo)才等于下標(biāo)
       }
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • [TOC] 參考阮一峰的ECMAScript 6 入門(mén)參考深入淺出ES6 let和const let和const都...
    郭子web閱讀 1,915評(píng)論 0 1
  • 三,字符串?dāng)U展 3.1 Unicode表示法 ES6 做出了改進(jìn),只要將碼點(diǎn)放入大括號(hào),就能正確解讀該字符。有了這...
    eastbaby閱讀 1,668評(píng)論 0 8
  • 數(shù)組的擴(kuò)展--轉(zhuǎn)自:阮一峰《ECMAScript 6 入門(mén)》 Array.from( Array.from方法用于...
    呼呼哥閱讀 648評(píng)論 0 0
  • 1.Set 基本用法 ES6提供了新的數(shù)據(jù)結(jié)構(gòu)Set。它類(lèi)似于數(shù)組,但是成員的值都是唯一的,沒(méi)有重復(fù)的值。Set本...
    雨飛飛雨閱讀 1,942評(píng)論 0 7

友情鏈接更多精彩內(nèi)容