• ES6 set map初识


    Set

    SetES6给开发者带来的一种新的数据结构,类似数组,最重要的不同点是:它的值不会有重复项。Set本身是一个构造函数,你可以理解为一个类,使用的时候需要用new来创建一个实例。

    1. var s = new Set(['a','b','c']);
    2. console.log(s);
    3. // Set(3) {'a', 'b', 'c'}

    四个常用方法:添加、删除、是否含有、清空

    一个常用属性: size

    1. var s = new Set(['a','b','c']);
    2. console.log(s);
    3. s.add(1) // 添加值
    4. console.log(s);
    5. console.log(s.size); // size 属性类似于数组的长度
    6. console.log(s.delete('a')) // 删除a返回一个布尔值
    7. console.log(s);
    8. console.log(s.has('b')); // 是否含有b ,返回一个布尔类型
    9. s.clear() // 清空
    10. console.log(s.size)
    11. // 打印结果如下
    12. Set(3) {'a', 'b', 'c'}
    13. Set(4) {'a', 'b', 'c', 1}
    14. 4
    15. Set(3) {'b', 'c', 1}
    16. true
    17. 0

    set最常用的就是利用不会重复的特性做数组去重:

    1. let arr=[1,1,1,2,2,3,4,5,3]
    2. let newArr = Array.from(new Set(arr))
    3. console.log(newArr);
    4. // [1, 2, 3, 4, 5]

    Map

    这个map类似于对象,存的是键值对:key=>value;但是它的key键名的类型不再局限于字符串类型了,它可以是各种类型的值;初始化也是需要new。并且也不会重复;先介绍一下他的基础语法

    1. let m = new Map([
    2. ["name","zs"],
    3. ["age",18]
    4. ]);
    5. console.log(m);
    6. // Map(2) {'name' => 'zs', 'age' => 18}

    上面提到他的key可以是任意类型

    1. let m = new Map()
    2. //数组类型的键名
    3. m.set([1],2);
    4. //对象类型的键名
    5. m.set({"name":"Zhangsan"},2);
    6. //布尔类型的键名
    7. m.set(true,2);
    8. //Symbol类型的键名
    9. m.set(Symbol('name'),2);
    10. //null为键名
    11. m.set(null,2);
    12. //undefined为键名
    13. m.set(undefined,2);
    14. console.log(m);
    15. // 如下
    16. Map(6) {Array(1) => 2, {…} => 2, true => 2, null => 2, …}
    17. [[Entries]]
    18. 0: {Array(1) => 2}
    19. 1: {Object => 2}
    20. 2: {true => 2}
    21. 3: 2
    22. 4: {null => 2}
    23. 5: {undefined => 2}
    24. size: 6
    25. [[Prototype]]: Map

    四个常用方法:设置键值对、获取键值、删除、是否含有、清空

    一个常用属性: size

    1. let m = new Map([
    2. ["age",18]
    3. ]);
    4. console.log(m.size); // 获取map的长度
    5. m.set('name','zs') // 设置key:name value:zs
    6. m.set('age',20) // 设置键值对,age已经存在更新值
    7. console.log(m);
    8. console.log(m.get('age')); // 通过key获取value
    9. console.log(m.delete('name')) // 删除key为 1 的 返回一个布尔值
    10. console.log(m.has('name')); // map是否含有key为 1 的键值对
    11. m.clear() // 清空
    12. // 结果
    13. 1
    14. Map(2) {'age' => 20, 'name' => 'zs'}
    15. 20
    16. true
    17. false

    entries(条目)

    set和map都有这个方法 entries() ,供我们来进行遍历写法如下

    1. // m为map
    2. let m = new Map([
    3. ["age",18],
    4. ['name','zs']
    5. ]);
    6. // 或者set
    7. let m = new Set(['a','b','c']);
    8. for(let item of m.entries()){
    9. console.log(item);
    10. }
    11. // 解构赋值
    12. for(let [key,value] of m.entries()){
    13. console.log(key,value);
    14. }
    15. // map:
    16. ['age', 18]
    17. ['name', 'zs']
    18. // 解构map
    19. age 18
    20. name zs
    21. // set:
    22. ['a', 'a']
    23. ['b', 'b']
    24. ['c', 'c']
    25. // 解构set
    26. a a
    27. b b
    28. c c

    可以看到map是键值对格式,但是set的key,value是同一个值。其实对于遍历,它还给我们提供了另外两个函数,可以理解是entries的删减版

    1. // 只遍历key
    2. for(let key of m.keys()){
    3. console.log(key);
    4. }
    5. // 只遍历value
    6. for(let value of m.values()){
    7. console.log(value);
    8. }

    set和map,好用就好用在,他们可以自动去重,并且提供了一些方法,让我们能更好的管理和使用他们,一般项目来说,使用他们处理大量数据,可以减轻后端压力,增删改查在前端,再来一个保存接口就可以搞定,n多个接口再能完成的事情

  • 相关阅读:
    TypeScript配置文件设置详解
    高可用之战:Redis Sentinal(哨兵模式)
    数据分享|SAS数据挖掘EM贷款违约预测分析:逐步Logistic逻辑回归、决策树、随机森林...
    【Linux】Linux项目自动化构建工具——make/Makefile
    【无标题】
    目标文件里有什么
    未来市场对Java的需求高吗?
    MySQL服务关闭开机自启,改成手动启动状态
    滑动窗口 解题思路
    C++ string类模板
  • 原文地址:https://blog.csdn.net/paidaboluo/article/details/126104515