Array和Set對比
都是一個存儲多值的容器,二者能夠互相轉換,可是在使用場景上有區別。以下:
- Array的indexOf方法比Set的has方法效率低下
- Set不含有重複值(能夠利用這個特性實現對一個數組的去重)
- Set經過delete方法刪除某個值,而Array只能經過splice。二者的使用方便程度前者更優
- Array的不少新方法map、filter、some、every等是Set沒有的(可是經過二者能夠互相轉換來使用)
let set = new Set()
// Set轉化爲數組
let arr = Array.from(set)
let arr = [...set]
// 實例屬性(繼承自Set)
set.constructor === Set
set.size
// 操做方法
set.add(1) // 添加一個值
set.delete(1) //刪除一個值
set.has(1) //判斷是否有這個值(Array中的indexOf)
set.clear() //清除全部值
// 獲取用於遍歷的成員方法(Set的遍歷順序就是插入順序)
set.keys() // 返回鍵名的遍歷器
set.values() // 返回鍵值得遍歷器
set.entries() // 返回鍵值對的遍歷器
set.forEach() // 循環遍歷每一個值(和Array的方法一致)
for (let key of set.keys()){}
for (let val of set.values()){}
for (let entry of set.entries()){}
// 使用數組方法來處理set值
set = new Set(arr)
set = new Set([...set].map((x) => x = x * 2))
set = new Set([...set].filter((x) => x > 2))
Object和Map對比
Object是字符串-值,Map是值-值
- Object鍵爲string類型,Map的鍵是任意類型
- 手動計算Object尺寸,Map.size能夠獲取尺寸
- Map的排序是插入順序
- Object有原型,因此映射中有一些缺省的鍵。能夠理解爲Map=Object.create(null)
Map的方法集合
let map = new Map()
// 實例屬性(繼承自Map)
map.constructor === Map
map.size
// 操做方法
map.set(1,2)
map.get(1)
map.delete(1)
map.has(1)
map.clear()
// 遍歷方法
map.keys()
map.values()
map.entries()
map.forEach()
// Map和數組的轉換
map = new Map([['key','val'],[2,1]]) // 要求雙成員數組
let arr = [...map]
// 值得注意的是Map的鍵是跟內存綁定的
map.set([1], 's')
map.get([1])
let arr = [1]
let arr1 = [1]
map.set(arr, 's')
map.get(arr)
map.set(arr1, 's')
map.get(arr1)
參考文檔
Array
Set和Map
Set和Map阮一峯教程es6