zoukankan      html  css  js  c++  java
  • ES6-Set 和 Map 数据结构

    ES6 提供了新的数据结构 Set。它类似于数组,但是成员的值都是唯一的,没有重复的值。

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

    const s = new Set();
    
    [2, 3, 5, 4, 5, 2, 2].forEach(x => s.add(x));
    
    for (let i of s) {
      console.log(i);
    }
    // 2 3 5 4
    //面代码通过add方法向 Set 结构加入成员,结果表明 Set 结构不会添加重复的值。
    //向Set加入值的时候,不会发生类型转换

    Set 实例的属性和方法

    Set 结构的实例有以下属性。

    • Set.prototype.constructor:构造函数,默认就是Set函数。
    • Set.prototype.size:返回Set实例的成员总数。

    Set 实例的方法分为两大类:操作方法(用于操作数据)和遍历方法(用于遍历成员)。下面先介绍四个操作方法。

    • add(value):添加某个值,返回Set结构本身。
    • delete(value):删除某个值,返回一个布尔值,表示删除是否成功。
    • has(value):返回一个布尔值,表示该值是否为Set的成员。
    • clear():清除所有成员,没有返回值。

    JavaScript 的对象(Object),本质上是键值对的集合(Hash 结构),但是传统上只能用字符串当作键。这给它的使用带来了很大的限制。

    const data = {};
    const element = document.getElementById('myDiv');
    
    data[element] = 'metadata';
    data['[object HTMLDivElement]'] // "metadata"
    

      

    上面代码原意是将一个 DOM 节点作为对象data的键,但是由于对象只接受字符串作为键名,所以element被自动转为字符串[object HTMLDivElement]

    为了解决这个问题,ES6 提供了 Map 数据结构。它类似于对象,也是键值对的集合,但是“键”的范围不限于字符串,各种类型的值(包括对象)都可以当作键。也就是说,Object 结构提供了“字符串—值”的对应,Map结构提供了“值—值”的对应,是一种更完善的 Hash 结构实现。如果你需要“键值对”的数据结构,Map 比 Object 更合适。

    const m = new Map();
    const o = {p: 'Hello World'};
    
    m.set(o, 'content')
    m.get(o) // "content"
    
    m.has(o) // true
    m.delete(o) // true
    m.has(o) // false
    

      

    上面代码使用 Map 结构的set方法,将对象o当作m的一个键,然后又使用get方法读取这个键,接着使用delete方法删除了这个键。

    上面的例子展示了如何向 Map 添加成员。作为构造函数,Map 也可以接受一个数组作为参数。该数组的成员是一个个表示键值对的数组。

    const map = new Map([
      ['name', '张三'],
      ['title', 'Author']
    ]);
    
    map.size // 2
    map.has('name') // true
    map.get('name') // "张三"
    map.has('title') // true
    map.get('title') // "Author"
    

      Map 结构的实例有以下属性和操作方法。

    (1)size属性

    size属性返回 Map 结构的成员总数。

    (2)set(key, value)

    set方法设置键名key对应的键值为value,然后返回整个 Map 结构。如果key已经有值,则键值会被更新,否则就新生成该键。

    (3)get(key)

    get方法读取key对应的键值,如果找不到key,返回undefined

    (4)has(key)

    has方法返回一个布尔值,表示某个键是否在当前 Map 对象之中。

    (5)delete(key)

    delete方法删除某个键,返回true。如果删除失败,返回false

    (6)clear()

    clear方法清除所有成员,没有返回值。

  • 相关阅读:
    Win10LTSC无法下载新版Microsoft Edge浏览器
    python识别视频黑屏或者低清晰度
    python提取视频第一帧图片
    盘点一下lua脚本和python的区别(基础)
    selenium控制已打开的页面
    frida- registernatives获取so层动态注册函数
    剑指 Offer 53
    剑指 Offer 52. 两个链表的第一个公共节点
    单链表中的环涉及到的6个相关问题
    剑指 Offer 51. 数组中的逆序对
  • 原文地址:https://www.cnblogs.com/wangyunhui/p/7563080.html
Copyright © 2011-2022 走看看