什么是Map?

Map 对象保存键值对,并且能够记住键的原始插入顺序。任何值(对象或者原始值) 都可以作为一个键或一个值。

用法:

  1. let myMap = new Map();
  2. myMap.size//获取Map中的键值对个数
  3. myMap.set(key,value)//向Map中添加新的键值对
  4. myMap.get(key)//通过键查找对应的值
  5. myMap.has(key)//判断Map中是否含有key,有返回true,没有返回false
  6. myMap.delete(key)//从Map中移除对应数据
  7. myMap.clear()//清除Map中的所有元素

如何遍历Map

  1. let myMap = new Map()
  2. myMap.keys()//返回键名的遍历器
  3. myMap.values()//返回值的遍历器
  4. myMap.entries()//返回键值对的遍历器
  5. myMap.forEach()//使用回调函数遍历每个成员
  6. for...of === for(let B of A){}//将A中的B遍历

使用 for..of 方法迭代 Map

转自MDN

  1. let myMap = new Map();
  2. myMap.set(0, "zero");
  3. myMap.set(1, "one");
  4. for (let [key, value] of myMap) {
  5. console.log(key + " = " + value);
  6. }
  7. // 将会显示两个log。一个是"0 = zero"另一个是"1 = one"
  8. for (let key of myMap.keys()) {
  9. console.log(key);
  10. }
  11. // 将会显示两个log。 一个是 "0" 另一个是 "1"
  12. for (let value of myMap.values()) {
  13. console.log(value);
  14. }
  15. // 将会显示两个log。 一个是 "zero" 另一个是 "one"
  16. for (let [key, value] of myMap.entries()) {
  17. console.log(key + " = " + value);
  18. }
  19. // 将会显示两个log。 一个是 "0 = zero" 另一个是 "1 = one"

使用 forEach() 方法迭代 Map

  1. let myMap = new Map();
  2. myMap.set(0, "zero");
  3. myMap.set(1, "one");
  4. myMap.forEach(function(value, key) {
  5. console.log(key + " = " + value);
  6. })
  7. //forEach提供三个参数:key、value和Map本身
  8. // 将会显示两个logs。 一个是 "0 = zero" 另一个是 "1 = one"

其他方法见MDN

什么是Set?

Set 对象允许你存储任何类型的唯一值,无论是原始值或者是对象引用。
Map能存key、value,而Set只能存一个value。
Set中的元素只会出现一次,即 Set 中的元素是唯一的。
其实它的键和值是一样的,set.keys()===set.values()
任意两个对象都是不相同的,因为它们存储的地址不同,所以就算看着完全一样,也无法去重

  1. let mySet = new Set();
  2. mySet.add({'name':'frank'})
  3. mySet.add({'name':'frank'})//可以两个都添加进去
  1. let mySet = new Set();
  2. mySet.size//获取Set对象中值的个数
  3. mySet.add(value)//向Set中添加新的键值对
  4. mySet.has(value)//判断Set中是否含有value,有返回true,没有返回false
  5. mySet.delete(key)//从Set中移除对应数据,成功返回true,否则返回false
  6. mySet.clear()//清除Set中的所有成员,没有返回值