美文网首页
ES6 Set和Map数据结构

ES6 Set和Map数据结构

作者: 澹台琉璃 | 来源:发表于2019-03-10 21:01 被阅读0次

    Set

    基本用法

    set类似于数组,但是成员的值都是唯一的,没有重复的值

        let set = new Set()
        const arr = [1,2,3,1,2,3]
        arr.forEach(n => {
          set.add(n)
        })
        for(let n of set) {
          console.log(n)
        }
        // 1 2 3
    

    上面的代码用add()方法向set中添加数据,结果表明没有重复的值
    Set的构造函数可以接受一个数组作为参数
    使用Set对数组去重

    const arr = [1,2,3,1,2,3]
    const set = new Set(arr)
    console.log([...set]) // [1 2 3]
    

    向set中添加数据时不会发生类转换,5和'5'是两个不同的值,并且add()方法会返回当前Set对象,可以使用链式写法

    const set = new Set()
          .add(5)
          .add('5')
        console.log([...set]) // [5, '5']
    

    Set 实例的属性和方法

    Set 结构的实例有以下属性。
    Set.prototype.constructor:构造函数,默认就是Set函数。
    Set.prototype.size:返回Set实例的成员总数。

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

    const set = new Set()
    set.add(1).add(2).add(3) // [1,2,3]
    set.delete(1) // true
    set.has(1) // false
    set.has(2) // true
    set.clear() // []
    

    Set 遍历方法:

    Set 结构的实例有四个遍历方法,可以用于遍历成员
    Set的遍历顺序就是插入顺序
    keys():返回键名的遍历器
    values():返回键值的遍历器
    entries():返回键值对的遍历器
    forEach():使用回调函数遍历每个成员

    const set = new Set()
    set.add('red').add('pink').add('green')
    for (let item of set.keys()) {
      console.log(item)
    }
    // red
    // pink
    // green
    
    for (let item of set.values()) {
      console.log(item)
    }
    // red
    // pink
    // green
    
    for (let item of set.entries()) {
      console.log(item)
    }
    // ["red", "red"]
    // ["pink", "pink"]
    // ["green", "green"]
    

    Set的实例默认可遍历,直接用for...of循环遍历Set

    const set = new Set()
    set.add('red').add('pink').add('green')
    
    for (let item of set) {
      console.log(item)
    }
    // red
    // pink
    // green
    

    Map

    Map数据结构类似于对象,都是键-值对的集合,但是Map的'键'的范围不限于字符串,而是包括各种类型的数据

    const o = {
      name: 'tom',
      age: 12
    }
    let map = new Map()
    map.set(o, 'content')
    map.get(o) // content
    

    Map的构造函数接受任何具有 Iterator 接口、且每个成员都是一个双元素的数组的数据结构作为参数

    let map = new Map([
      ['name', 'tom'],
      ['age', 12]
    ])
    map.get('name') // tom
    map.get('age') // 12
    

    Map的键是跟内存地址绑定的,只要内存地址不一样就视为不同的键

    let map = new Map()
    map.set([1], 'a')
    map.get([1]) // undefined
    

    上面的代码中两个[1]在内存中的地址不同,因此对Map来说并不是同一个键

    Map的实例属性和方法

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

    let map = new Map()
    map.set('name', 'tom')
    map.set('age', 12)
    map.size // 2
    

    set(key, value):设置key对应的值为value,如果key已存在则更新key的值,返回当前Map对象,可采用链式写法

    let map = new Map()
      .set(1, 'a')
      .set(2, 'b')
      .set(3, 'c');
    

    get(key): 返回key对应的value,如果key不存在则返回undefined
    has(key):判断某个键是否在Map对象中,返回布尔值
    delete(key):删除某个键,成功返回true,失败返回false
    clear():清除所有成员,没有返回值

    Map遍历方法

    Map 的遍历顺序就是插入顺序
    keys():返回键名的遍历器。
    values():返回键值的遍历器。
    entries():返回所有成员的遍历器。
    forEach():遍历 Map 的所有成员。

    let map = new Map()
    map.set('name', 'tom')
    map.set('age', 12)
    
    for (let item of map.keys()) {
      console.log(item)
    }
    // "name"
    // "age"
    
    for (let item of map.values()) {
      console.log(item)
    }
    // "tom"
    // 12
    
    for (let [key, vaue] of map.entries()) {
      console.log(key, vaue)
    }
    // "name" "tom"
    // "age" 12
    
    map.forEach((value, key) => {
      console.log(value, key)
    })
    // "tom" "name"
    // 12 "age"
    

    相关文章

      网友评论

          本文标题:ES6 Set和Map数据结构

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