Set在其餘語言中又叫作集合,是由一堆無序的、相關聯的,且不重複的內存結構組成的組合。git
根據定義能夠得出幾個關鍵點:github
size: 返回集合中所包含的元素的數量面試
add(value): 向集合中添加一個新的項數組
delete(value): 從集合中刪除一個值數據結構
has(value): 若是值在集合中存在,返回ture, 不然返回false函數
clear(): 移除集合中的全部項ui
keys(): 返回鍵名的遍歷器spa
values(): 返回鍵值的遍歷器 (因爲 Set 沒有鍵名只有鍵值,全部 keys 和 values 效果一致)code
entries(): 返回鍵值對的遍歷器對象
forEach(): 使用回調函數遍歷每一個成員
Set 自己是一個構造函數,用來生成Set結構
const s = new Set()
[1,2,3,4,4].forEach(i => s.add(i))
for(let i of s) {
console.log(i)
}
// output: 1 2 3 4
// Set不會添加劇復元素
複製代碼
上面代碼能夠看出 Set 用途之一是能夠去除數組中的重複元素
Set 構造函數還能夠接受一個數組(或具備 iterable 接口的其餘數據結構)做爲參數,用來初始化一個集合。
// 例 1
const s = new Set([1,2,3,4,5,5,4,'5'])
[...s] // [1,2,3,4,5,'5']
// 注意 向 Set 中加入值的時候不會發生類型轉換, Set內部用 (===) 來判斷兩個值是否相等
// 例 2
const m = new Map()
m.set('a', 1)
m.set('a', 2)
const s = new Set(m)
[...s] // [['a', 1], ['b', 2]]
Array.from(s) // [['a', 1], ['b', 2]] Array.from方法能夠將 Set 轉爲數組
複製代碼
WeakSet 結構與 Set 相似,也是不重複的值的集合
相似於對象,也是鍵值對的集合
與對象(Object)的區別:
size: 返回 Map 結構的元素總數
set(key, value): 向 Map 中加入或更新鍵值對
get(key): 讀取 key 對用的值,若是沒有,返回 undefined
has(key): 某個鍵是否在 Map 對象中,在返回 true 不然返回 false
delete(key): 刪除某個鍵,返回 true, 若是刪除失敗返回 false
clear(): 刪除全部元素
keys():返回鍵名的遍歷器
values():返回鍵值的遍歷器
entries():返回全部成員的遍歷器
forEach():遍歷 Map 的全部成員
const m = new Map()
m.set('a', 1)
m.set(1: 'a')
m.get('a') // 1
m.has(1) // true
m.size() // 2
複製代碼
const map = new Map([
['F', 'no'],
['T', 'yes'],
])
for (let key of map.keys()) {
console.log(key)
}
// "F"
// "T"
for (let value of map.values()) {
console.log(value)
}
// "no"
// "yes"
for (let [key, value] of map) {
console.log(key, value)
}
// "F" "no"
// "T" "yes"
[...map] // [['F', 'no'], ['T', 'yes']]
複製代碼
WeakMap 結構與 Map 結構相似,也是用於生成鍵值對的集合。
關注github每日一道面試題詳解