簡述
- 原理:Set對象 + Array.from + 擴(kuò)展運(yùn)算符
具體實現(xiàn):
const nums = [1,2,3,4,3,2,1]
uniq1 = [...new Set(nums)]
uniq2 = Array.from(new Set(nums))
相關(guān)擴(kuò)展:set 和map
set:
定義:新數(shù)據(jù)結(jié)構(gòu)Set,類似于數(shù)組,但成員值不重復(fù)
使用: new Set()
var set = new Set([1,2,3,4,3,2,1]); […set] // [1,2,3,4]
ps:New Set() 接受一個數(shù)組或類數(shù)組對象,在Set內(nèi)部, NAN相等,兩個對象不等,可以用length檢測,可以用for...of遍歷
- Set有四個操作方法和屬性:
size:返回值的個數(shù)
add(val):添加值,返回set結(jié)構(gòu);
delete(val):刪除值,返回布爾值
has(val):是否包含,返回布爾值
clear():清除所有成員,無返回值
- 遍歷方法:.keys()、.values()、.entries()、.forEach()
weakset:
與set類似,也是不重復(fù)值的集合
與set的區(qū)別:1.weakset 成員只能是對象,對象都是弱引用,垃圾回收機(jī)制不考慮,不可遍歷
擴(kuò)展Map:
定義:類似于對象,也是鍵值dui的集合,但鍵可以是各種類型(鍵可以為對象),兩個鍵嚴(yán)格相等才為同一個鍵。
- 使用:new Map()
Var m = new Map(), o = {1:2}
m.set(o, ‘hi’)
m.get(o)
m.has(o) //只有對同一個對象的引用才是同一個鍵
- Map有幾個方法:
size:返回值的個數(shù)
set(key, val):添加值,返回Map結(jié)構(gòu);
Get(key): 獲取值,返回val
Has(key):是否包含,返回布爾值
Delete(key):刪除值,返回布爾值
Clear():清除所有成員,無返回值
- 遍歷方法:.keys()、.values()、.entries()、.forEach()
擴(kuò)展:array.from
定義:把淚數(shù)組對象和有iterator接口的對象(Set Map Array)轉(zhuǎn)化為數(shù)組
使用:Array.from(arrayLike[, mapFn[, thisArg]]) 參數(shù):類數(shù)組,處理函數(shù)map,map中的this指向的對象
Array.from([1, 2, 3, 4, 5], (n) => n + 1) // 每個值都加一
- 轉(zhuǎn)換map:
const map = new Map()
map.set(‘k1’, 1)
map.set(‘k2’, 2)
Const a = Array.from(map); // [[‘k1’,1], [‘k2’, 2]]
- 轉(zhuǎn)換set
const set1 = new Set()
Set1.add(1).add(2).add(3)
Var a = Array.from(set1) // [1,2,3]
- 轉(zhuǎn)換string及unicode字符
console.log('%s', Array.from('hello world’)) //["h", "e", "l", "l", "o", " ", "w", "o", "r", "l", "d"]
console.log('%s', Array.from('\u767d\u8272\u7684\u6d77’)) //["白", "色", "的", "海"]
- 轉(zhuǎn)換類數(shù)組對象:屬性名必須為數(shù)字,或者可以轉(zhuǎn)換為數(shù)字,必須有l(wèi)ength 不然為空數(shù)組
var a = {0:1, 2:3, 4:5, length: 5};var b = {0:1, 2:3, 4:5, length: 3}
Array.from(a) // [1,undefined,3,undefined,4]
Array.from(b) // [1,undefined,3]