Map&Set

87 阅读2分钟

一、Set类

1、定义

Setes6新增的数据结构,类似于数组,但没有索引或顺序,不允许重复,我们一般称为集合

Set本身是一个构造函数,用来生成 Set 数据结构

let s = new Set()
// 参数必须是一个可迭代对象,可用于去重
let unique = new Set("set")
// ['s','e','t']

2、属性&方法

  • 属性

    size:返回集合所包含的元素个数

  • 操作方法

    add(value) 添加元素,返回Set本身

    delete(value) 删除某个元素 返回布尔值,表示是否删除成功

    has(value) 判断Set结构是否包含某个值, 返回布尔值

    clear() 清除所有成员 无返回值 (有无参数均清空)

      let set = new Set();
      console.log(set.add(1).add(2)); // Set [ 1, 2 ]
    
      console.log(set.delete(2)); // true
      console.log(set.has(2)); // false
    
      console.log(set.clear()); // undefined
      console.log(set.has(1)); // false
      console.log(set.size);  // 0
      
    
  • 遍历方法

    keys() 返回键名

    values() 返回键值

    entries() 返回键值对

    forEach() 循环遍历每一项 无返回值

3、应用

  • 数组去重 (Array.from()将Set类数组转化为真实的数组)

      const arr = [3,4,7,4,5,7,8];
      const setArr = new Set(arr); // Set [3,4,7,5,8]
      const endArr = Array.from(setArr); // [3,4,7,5,8]
      const endArr1 = [ ...setArr] ; // [3,4,7,5,8]
      
      
    

二、Map

1、定义

Map类型是键值对的有序列表,而键和值都可以是任意类型;

Map本身是一个构造函数,用来生成 Map 数据结构

const m = new Map({p: 'Hello World'})

2、属性&方法

  • 属性

    size 返回字典包含的元素个数

  • 操作方法

    set(key, value) 添加元素 相同的key 后添加的会替代前面添加的 返回map结构本身 get(key) 获取元素值 返回对应的value 没有返回undefined delete(key) 删除元素 返回布尔值 是否删除成功 has(key) 判断字典中是存在某个键 返回布尔值 clear() 删除全部 无返回值

      let m = new Map();
      m.set('qu', 'hui');
      m.set('qu', 'cute');
      m.set(true, '真的boolean');
      console.log(m.size); // 2
      console.log(m.has('qu')); // true
      console.log(m.keys()); // [ 'Jay', 'true' ]
      console.log(m.values()); // [ 'cute', '真的boolean' ]
      console.log(m.get('xu')); // undefined
      console.log(m.get('qu')); // cute
    
      m.delete(true);
      console.log(m.keys()); // [ 'qu' ]
      console.log(m.values()); // [ 'cute' ]
      
      
    

    二维数组

      var m = new Map([['name', 'zhangsan'],['sex', 'male']]);
      console.log(m);   //Map {"name" => "zhangsan", "sex" => "male"}
    
  • 遍历方法 Map结构原生提供三个遍历器生成函数和一个遍历方法:

    keys():返回键名的遍历器

    values():返回键值的遍历器

    entries():返回所有成员的遍历器

    forEach():遍历 Map 的所有成员

       var map = new Map([['age', 18],['weight', 95]]);
    
       for (let key of map.keys()) {
         console.log(key); // age weight
       }
    
       for (let value of map.values()) {
         console.log(value); //18 95
       }
    
       for (let item of map.entries()) {
         console.log(`${ item[0] }: ${ item[1] }`);  //age: 18  weight: 95
       }
    
       for (let [key, value] of map.entries()) {
         console.log(`${ key }: ${ value }`); //age: 18  weight: 95
       }
    
       for (let [key, value] of map) {
         console.log(`${ key }: ${ value }`); //age: 18  weight: 95
       }
    
       map.forEach((value, key, map) => {
         console.log(`${ key }: ${ value }`); //age: 18  weight: 95
       });
    

三、Set、Map区别

  • 共同点:集合、字典可以存储不重复的值

  • 不同点:集合是以[值,值]的形式存储元素,字典是以[键,值]的形式存储