4

个人理解: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


玛德致
280 声望6 粉丝