美文网首页
11Set和Map函数

11Set和Map函数

作者: 我_巨可爱 | 来源:发表于2017-10-30 16:58 被阅读0次

    set

    set是一种新型的数据结构,它类似与数组,但是成员的值都是唯一的,没有重复的值

    基本用法

    // 参数是数组
    const set = new Set([1,2,3,4,3,5]);
    [...set] // [1,2,3,4,5]
    
    // 数组去重的用法
    [...new Ser(array)]
    

    set 实例的属性和方法

    size

    s.add(1).add(2).add(2)
    s.size //2
    

    操作方法

    // 添加某个值,返回Set结构本身
    s.add(1)
    
    // 删除某个值,返回布尔类型,表示是否删成功
    s.delete(1)
    
    // 判断某值是不是Set成员,返回布尔类型
    s.has(2)
    
    // 清楚所有成员
    s.clear();
    
    // 将 Set 结构转化成 数组
    const items = new Set([1,2,3,3]);
    const arr = Array.from(items);
    

    遍历操作

    遍历器,任何数据结构只要部署了Iteration接口,便可以使用类似的方式完成遍历操作。它有自己的遍历方式

    1. 有四个遍历方法
    • keys,返回键名的遍历器
    • values,返回键值的遍历器
    • entries,返回键值对的遍历器,单项是数组的形式
    • forEach,使用回调函数遍历每个成员
    1. 因为Set结构没有键名,只有键值,所以 keys 方法和 values 方法的行为完全一致
    2. Set结构的实例默认可遍历,它的默认遍历器生成函数就是它的 values 方法。因为默认可以遍历,可以直接使用for...of遍历
    3. forEach对每个成员进行操作,第二个参数,context
    4. 遍历的应用。...内部使用for..of,因此,扩展运算符也可以用于Set结构
    // 默认遍历器生成函数
    Set.prototype[Symbol.iterator] === Set.prototype.values
    
    // forEach
    set.forEach((value,key) => console.log(value*2));
    

    WeakSet

    WeakSet 结构和 Set 相似,但是有以下不同

    1. WeakSet 成员只能是对象,不能是其他类型的值
    2. WeakSet 中是弱引用,如果其他地方不引用 WeakSet 中的对象,垃圾回收机制会自动回收。

    语法

    // 正确,数组中每一项是对象
    const a = [[1,2],[3,4]];
    const ws = new WeakSet(a);
    // 错误
    const a = [1,2];
    const ws = new WeakSet(a);
    

    WeakSet 操作方法

    1. add
    2. delete
    3. has
    4. 没有size属性,不能遍历

    Map

    对象,其实是字符串和值的松散集合,但是Map允许,值做键。

    基本用法

    // 对象做键
    const m = new Map();
    const o = {p: 'Hi'};
    
    m.set(o,'content');
    m.has(o);  // true
    m.get(o)
    
    // 接受二维数组做参数
    // 第二维,对应的就是键值
    const map = new Map([
        ['name','yf'],
        ['title','hh']
    ]);
    
    map.size  //2
    map.has('name'); // yf
    
    
    // 参数也可以是set 和 map 类型
    

    注意点

    1. 同一键赋值两次,后者覆盖前者
    2. 键不存在,返回 undefined
    3. 以下是不同的键
    4. 如果键是简单类型,数字,字符串,布尔值,需要全等。nullundefined不等,但是NaN看作同一个键
    const a = ['z'];
    const b = ['z'];
    
    const map = new Map();
    
    map
    .set(a,1)
    .set(b,2);
    
    map.get(a); //1
    map.get(b);//2
    

    实例的属性和方法

    1. size
    2. set(key,val)
    3. get(key)
    4. has(key)
    5. delete(key)
    6. clear()

    遍历方法

    1. keys()
    2. values()
    3. entries()
    4. forEach

    与其他数据类型转化

    WeakMap

    WeakMap 和 Map 主要有以下不同

    1. WeakMap 只接受对象作为键名,null除外。
    2. Weabpack 的键名指向的对象,不计入垃圾回收机制
    3. 该数据结构主要的目的再某个对象上存放一些收据

    基本使用

    const wm = new WeakMap();
    const element = document.getElementById('example');
    
    wm.set(element,'some information');
    

    实例方法

    1. set()
    2. get()
    3. delete()
    4. has()

    相关文章

      网友评论

          本文标题:11Set和Map函数

          本文链接:https://www.haomeiwen.com/subject/qycmpxtx.html