• 【ES6】-- Set与Map | Map与Object


    Set

    Set是ES6提供的一种新的数据结构,允许存储任何类型的值, 类似于数组,但Set中的成员是唯一的, 没有重复值

    •  构造函数创建一个set数据结构
    let set = new Set();'
    运行

    Set中的特殊值

    因为Set中的值是唯一的,需要判断两个值是否恒等。在此有几个特殊值需要特殊对待:

    1. console.log(+0 === -0); // true
    2. console.log(undefined === undefined); // true
    3. console.log(NaN === NaN); // false
    '
    运行

    Set实例对象的方法

    • add

            向set对象中添加新的成员

    1. set.add('zzy');
    2. set.add('water')
    3. console.log(set); // Set(2) { 'zzy', 'water' }

    注意: 使用add方法添加基本数据类型会自动去重,添加引用数据类型不会去重

    1. set.add('zzy');
    2. set.add('water')
    3. console.log(set); // Set(2) { 'zzy', 'water' }
    4. set.add([1]);
    5. console.log(set); // Set(3) { 'zzy', 'water', [ 1 ] }
    6. set.add('water')
    7. set.add([1]);
    8. // 使用add方法添加基本数据类型会自动去重
    9. // 添加引用数据类型不会去重
    10. console.log(set); // Set(4) { 'zzy', 'water', [ 1 ], [ 1 ] }
    • size

    查看set的长度

    console.log(set.size); // 2
    • delete

    删除set对象中的成员

    1. set.delete('zzy');
    2. console.log(set); // Set(3) { 'water', [ 1 ], [ 1 ] }

    • has

    判断有没有某个成员

    set.has('hello');  // 返回布尔值true或者false
    • clear

    清空set 无参无返回值

    set.clear();

    应用:数组去重

    console.log(...new Set([1,22,22,3,4])); // 1 22 3 4'
    运行

    遍历方法

    • keys():返回键名的遍历器。

    • values():返回键值的遍历器。
    • entries():返回键值对的遍历器。
    • forEach():使用回调函数遍历每个成员。

    1. // keys和 values是一样的
    2. console.log(set.keys()); // [Set Iterator] { 'water', [ 1 ], [ 1 ] }
    3. console.log(set.values()); // [Set Iterator] { 'water', [ 1 ], [ 1 ] }
    4. console.log(set.entries());
    5. // [Set Entries] {
    6. // [ 'water', 'water' ],
    7. // [ [ 1 ], [ 1 ] ],
    8. // [ [ 1 ], [ 1 ] ]
    9. // }
    10. let res = set.forEach((key,value,set)=>{
    11. console.log(key,value,set);
    12. })
    13. console.log(res);
    14. // water water Set(3) { 'water', [ 1 ], [ 1 ] }
    15. // [ 1 ] [ 1 ] Set(3) { 'water', [ 1 ], [ 1 ] }
    16. // [ 1 ] [ 1 ] Set(3) { 'water', [ 1 ], [ 1 ] }

    Map

    Map是一种集合,类似于对象,是由键值对组成的数据结构。 键可以是任意数据类型

    而对象的键只能是字符串或者symbol值。

    • 构造函数创建一个map集合
    let map = new Map();'
    运行

    Map实例对象的方法

    • set

            给map添加成员 

    1. // 第一个参数是key值 第二个参数是value值
    2. map.set("yse","zzy")
    3. map.set([2],'hello')
    4. console.log(map); // Map(2) { 'yse' => 'zzy', [ 2 ] => 'hello' }
    • delete

            删除Map中的成员,

            可以直接删除基本数据类型的键,删除引用数据类型需要删除引用地址

    1. map.delete("yse")
    2. console.log(map); // Map(1) { [ 2 ] => 'hello' }
    • get

            获取成员

    1. map1.get([2])
    2. console.log(map1); // Map(1) { [ 2 ] => 'hello' }

    Map与其他数据结构的互相转换

    • map与数组的转换 
    1. const arr = [[{'a': 1}, 111], ['b': 222]]
    2. const myMap = new Map(arr)
    3. [...myMap] // map转数组。 [[{'a': 1}, 111], ['b': 222]]
    • map与对象的互换
    1. const obj = {}
    2. const map = new Map(['a', 111], ['b', 222])
    3. for(let [key,value] of map) {
    4. obj[key] = value
    5. }
    6. console.log(obj) // {a:111, b: 222}

    注意:

    JSON字符串要转换成Map可以先利用JSON.parse()转换成数组或者对象,然后再转换即可。

    面试问点 

    Set和Map的区别

    1. Map是键值对,Set是值的集合,当然键和值可以是任何的值;
    2. Map可以通过get方法获取值,而set不能,因为它只有值;
    3. Set的值是唯一的可以做数组去重,Map由于没有格式限制,可以做数据存储

    Map和Object的区别

    1. 一个Object 的键只能是字符串或者 Symbols,但一个Map 的键可以是任意值。
    2. Map中的键值是有序的,而添加到Object中的键则不是。
    3. Map的键值对个数可以从 size 属性获取,而 Object 的键值对个数只能手动计算。
    4. Object 都有自己的原型,原型链上的键名有可能和你自己在对象上的设置的键名产生冲突。而Map 默认情况不包含任何键。只包含显式插入的键。

  • 相关阅读:
    Swift 5.9 有哪些新特性(二)
    前后端分离跨域问题及SameSite=Lax解决方法
    32位单片机GPIO端口电路结构以及输出模式
    wireshark——解密加密报文
    竞赛选题 车位识别车道线检测 - python opencv
    想要精通算法和SQL的成长之路 - 打家劫舍系列问题
    Python复习知识点(二)
    Web框架开发-web框架
    Spring5学习笔记04--Bean后处理器
    测试网页调用本地可执行程序(续:带参数调用)
  • 原文地址:https://blog.csdn.net/qq_48802092/article/details/127034692