Array和Set对照
都是一个存储多值的容器,二者能够相互转换,然则在运用场景上有区分。以下:
- Array的indexOf要领比Set的has要领效力低下
- Set不含有反复值(能够应用这个特征完成对一个数组的去重)
- Set经由过程delete要领删除某个值,而Array只能经由过程splice。二者的运用方便水平前者更优
- Array的许多新要领map、filter、some、every等是Set没有的(然则经由过程二者能够相互转换来运用)
Set操纵鸠合(WeakSet)
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)