JavaScript Map和Set数据结构

一、Set数据结构

1、基本用法
  • ES6 提供的新的数据结构,类似于数组,但是里面每个元素都是唯一的

  • Set本身是一个构造函数

  • 可以接受一个数组作为参数

    const set = new Set([1, 2, 3, 4, 4,4,4]);
    [...set]// [1, 2, 3, 4]
    
  • Array.from可以将Set数据转化为数组

  • 如上可得到 Set进行数组去重

    [...new Set(array)]
    //或者
    Array.from(new Set(array))
    
  • 也可以继续字符串去重

    [...new Set(str)].join()
    
  • ⚠注意:向Set加入值得时候,并不会做隐式转化,但是加入NaN时会被默认为等于NaN(本身任何NaN都不等于任何NaN),另外两个对象总是不相等的

2、Set的属性和实例方法
  • Set.prototype.add(value):添加某个值,返回 Set 结构本身。
  • Set.prototype.delete(value):删除某个值,返回一个布尔值,表示删除是否成功。
  • Set.prototype.has(value):返回一个布尔值,表示该值是否为Set的成员。
  • Set.prototype.clear():清除所有成员,没有返回值。
  • Set.prototype.size:返回Set实例的成员总数。
3、遍历操作
  • Set.prototype.keys():返回键名的遍历器

  • Set.prototype.values():返回键值的遍历器

  • Set.prototype.entries():返回键值对的遍历器

  • Set.prototype.forEach():使用回调函数遍历每个成员

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

二、Map数据结构

1、基本用法
  • 问题

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

  • 为了解决这个问题,ES6 提供了 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 转为数组

    扩展运算符

  • Map 转为对象

    遍历map转化为对象

  • 对象转为 Map

    对象转为 Map 可以通过Object.entries()

    let obj = {"a":1, "b":2};
    let map = new Map(Object.entries(obj));
    
2、属性实例方法
  • size属性返回 Map 结构的成员总数。

  • Map.prototype.set(key, value):

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

  • Map.prototype.get(key):

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

  • Map.prototype.has(key):

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

  • Map.prototype.delete(key)

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

  • Map.prototype.clear()

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

3、遍历方法
  • 和Set相同
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值