• new Map()详细介绍与对比


     说明:

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

    map 的定义

    1
    2
    1、let map = new Map();
    2、let map = new Map([[key,value],[key,value]]); //默认带初始化参数的定义

      如果Map的键是一个简单类型的值(数字、字符串、布尔值),则只要两个值严格相等,Map将其视为一个键,包括0和-0。另外,虽然NaN不严格相等于自身,但Map将其视为同一个键。

    复制代码
        let map = new Map();
        let obj = {name:1};
        map.set(true,'111');
        map.set(obj,'111');
        map.set(1,1);
        map.set(1,1);
        map.set(undefined,undefined);
        map.set(null,null);
        map.set(NaN,NaN);
        map.set([1,2,3],1);
        console.log(map); 
        // map{[[Entries]]:[
            {true => "111"},
            {Object => "111"},
            {1 => 1},
            {undefined => undefined},
            {null => null},
            {NaN => NaN},
            {Array(3) => 1}
          ]}
    复制代码

    注意:只有对同一个对象的引用,Map结构才将其视为同一个键。

        var map = new Map();
        map.set(['a'], 555);
        map.get(['a']) // undefined

    上面代码的set和get方法,表面是针对同一个键,但实际上这是两个值,内存地址是不一样的,因此get方法无法读取该键,返回undefined。

    实例属性和方法:

    size、set、get、has、delete、clear 

    遍历方法:

    keys()、values()、entries()、forEach()

    Map 和 Array的对比 优势与劣势

    复制代码
        let map = new Map();
        let arr = new Array();
        //增:
        map.set('a',1);
        arr.push({'a': 1});
        //查:
        map.has('a');
        arr.find(item=>item.a);
        //改:
        map.set('a',2);
        arr.forEach(item=>item.a?item.a=2:'');
        //删:
        map.delete('a');
        arr.splice(arr.findIndex(item=>item.a),1);
    
        console.log(map);
        console.log(arr);
    复制代码

    set map object 对比 优势与劣势

    复制代码
        let item = {a: 1};
        let set = new Set();
        let map = new Map();
        let obj = new Object();
        //增
        set.add(item);
        map.set('a', 1);
        obj['a'] = 1;
        //查
        set.has(item);// true
        map.has('a');// true
        'a' in obj;// true
        //改
        item.a = 2;
        map.set('a', 2);
        obj['a'] = 2;
        //删
        set.delete(item);
        map.delete('a');
        delete obj['a'];
        console.log(set);
        console.log(map);
        console.log(obj);
    复制代码

    总结:在开发过程中,涉及到数据结构,能使用Map 不使用Array 尤其是复杂的数据结构 ,如果对于数组的存储考虑唯一性 使用Set ,优先使用map 如果要求数据储存的唯一性使用Set 放弃使用Array。

  • 相关阅读:
    Directx11学习笔记【九】 【转】 3D渲染管线
    排序算法总结
    [LeetCode92]Reverse Linked List II
    c++析构函数为什么要为虚函数
    简析iOS动画原理及实现——Core Animation
    Xcode 插件集:xTextHandler
    [iOS] 在 ios10 中使用 imessage
    UITableView-FDTemplateLayoutCell 学习笔记
    Xcode 7.3 cannot create __weak reference in file using manual reference counting
    iOS10个实用小技巧(总有你不知道的和你会用到的)
  • 原文地址:https://www.cnblogs.com/tommymarc/p/14639166.html
Copyright © 2020-2023  润新知