es6 Map和Set

59 阅读1分钟

Map

  • 能够保存键值对,并且能够记住键的原始插入顺序,任何值(函数、对象、基本类型)都可以作为一个键或者一个值
  • 键值NaN与NaN相等,使用===运算符判断是否相等
  • 可以直接通过size属性获取键值对个数
  • 键值对有序
  • 可直接被迭代
  • 频繁增删键值对,性能更好
  • 与Object对比:
    • Object是无序的
    • Object具有原型,原型链上的键名可能与定义的冲突
    • Object键值必须是一个String或者Symbol
    • 个数需要手动计算
    • Object转换为Map
  • 用法:
const map = new Map();
map.set('a',1); // 存储数据
map.set('b',2); 
map.delete('c') // false 删除数据
map.keys()  // {'a','b'}
map.values() // {1,2}
// map.clear(); // 移除所有的属性
console.log(map,map.get('a'),map.size);// Map {'a'=>1,'b'=>2} 1 2
  • 迭代方式
    • for of
    const map = new Map();
    map.set('a',1);
    map.set('b',2);
    for( const [key,value] of map){
      console.log(key,value); // a 1,b 2
    }
    
    • forEach()
    const map = new Map();
    map.set('a',1);
    map.set('b',2);
    map.forEach((value,key)=>{
      console.log(key,value)  // a 1,b 2
    })
    
  • 使用场景:

Set

  • 可存储唯一值(键),存储类型(原始值、对象引用)
  • NaN 之间被视为相同的值(NaN 被认为是相同的,尽管 NaN !== NaN)
  • 用法:
    const set = new Set();
     set.add(1); // {1} // 末尾新增一个值
     set.add(2); // {1,2}
    
     // set.clear(); // 清空Set对象
     set.delete(1); // 移除某个值
     set.has(2); // true 查找某个值是否在Set对象中 返回布尔值
     set.keys(); // {1}
     set.values(); // {1}
     console.log( set,set.size,set.has(2)) // {2} 1
    
  • 迭代方式
    • forEach
    const set = new Set();
       set.add(1); // {1} // 末尾新增一个值
       set.add(2); // {1,2}
       set.forEach((key) => {
       console.log( key) // 1,2
       });
    
  • 使用场景
    • 数组去重
      let arr =[1,1,1,1,2];
      console.log([...new Set(arr)]); // [1,2]
      

image.png