个人理解:Set类似于一维数组,Map类似于二维数组或者对象
相同点
感觉仅在于有几个名称和功能相同的基础属性和方法:
- size属性 返回元素的个数
- clear 清除所有元素
- delete 移除指定元素
- forEach 按序遍历数据
- has 判断是否包含该元素
- keys/values 按序返回一个可迭代对象,不同的是,Set的keys和values方法返回的是一样的内容,Map的keys方法返回对象中每个元素的键,values方法返回对象中每个元素的值
Set
Set是存储了一组有序且值唯一数据的对象
创建及使用
let set = new Set()
set.add(1)
set.add('test')
set.add({a:1})
console.log(set)
// {1, "test", {…}}
迭代
for (let item of set) console.log(item);
// 按顺序输出:1, "test", {a:1}
for (let item of set.keys()) console.log(item);
// 按顺序输出:1, "test", {a:1}
for (let item of set.values()) console.log(item);
// 按顺序输出:1, "test", {a:1}
for (let [key, value] of set.entries()) console.log(key,value);
//(键与值相等)
按顺序输出1 1, "test" "test", {a:1} {a:1}
Map
Map是一个键名可以为任意类型的,键值有序的数据对象。
除了键名与有序这两个特征之外,Map与对象的区别还有
- Map有size属性可以直接获取到键值对个数
- Map可以直接迭代,而对象需要使用keys方法获取到键的数组才能迭代
创建与使用
let map = new Map()
let obj = {a:1}
let func = function(){}
map.set(1,'value1')
map.set(obj,'obj')
map.set(func,'function')
console.log(map)
// {1 => "value1", {…} => "obj", ƒ => "function"}
map.get(obj)
// 'obj'
map.get(func)
// 'function'
迭代方式与Set一致
参考资料:
1.https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Set
2.https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Map
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。