let arr=['1','a','a','3','1']
let a=Array.from(new Set(arr))
或者這么寫,用擴展運算符(...
),擴展運算符內部調用的是數據結構的 Iterator 接口
let a=[...new Set(arr)]
結果a為["1" , "a" , "3"]
拓展1:Set 實例
1.Set 結構的實例有以下屬性
Set.prototype.constructor
:構造函數,默認就是Set
函數
Set.prototype.size
:返回Set
實例的成員總數
2.Set 實例的方法分為兩大類:操作方法(用於操作數據)和遍歷方法(用於遍歷成員)
2.1.下面先介紹四個操作方法
add(value)
:添加某個值,返回 Set 結構本身
delete(value)
:刪除某個值,返回一個布爾值,表示刪除是否成功
has(value)
:返回一個布爾值,表示該值是否為Set
的成員
clear()
:清除所有成員,沒有返回值
2.2.然后是四個遍歷方法,可以用於遍歷成員
keys()
:返回鍵名的遍歷器
values()
:返回鍵值的遍歷器
entries()
:返回鍵值對的遍歷器
forEach()
:使用回調函數遍歷每個成員
拓展2:Array.from()
Array.from
方法用於將兩類對象轉為真正的數組:類似數組的對象(array-like object)和可遍歷(iterable)的對象(包括 ES6 新增的數據結構 Set 和 Map)。
1.只要是部署了 Iterator 接口的數據結構,Array.from
都能將其轉為數組。
2.另一個應用是,將字符串轉為數組,然后返回字符串的長度
3.Array.from
的第一個參數指定了第二個參數運行的次數。這種特性可以讓該方法的用法變得非常靈活
Array.from({ length: 2 }, () => 'jack')
// ['jack', 'jack']
拓展3:擴展運算符(...
),的應用
1.復制數組
數組是復合的數據類型,直接復制的話,只是復制了指向底層數據結構的指針,而不是克隆一個全新的數組。
ES5 只能用變通方法來復制數組:
const a1 = [1, 2];
const a2 = a1.concat();
擴展運算符提供了復制數組的簡便寫法:
const a2 = [...a1];
或
const [...a2] = a1;
2.合並數組
3.與解構賦值結合, 擴展運算符可以與解構賦值結合起來,用於生成數組
4.字符串,擴展運算符還可以將字符串轉為真正的數組
5.實現了 Iterator 接口的對象,任何定義了遍歷器(Iterator)接口的對象(參閱 Iterator 一章),都可以用擴展運算符轉為真正的數組
6.Map 和 Set 結構,Generator 函數,擴展運算符內部調用的是數據結構的 Iterator 接口,因此只要具有 Iterator 接口的對象,都可以使用擴展運算符,比如 Set 結構。
本文參考來自:http://es6.ruanyifeng.com/#docs/array