精华内容
下载资源
问答
  • js map对象
    千次阅读
    2022-04-19 15:30:53
    for(let key in mapData)
      console.log("属性:" + key + ",值:"+ mapData[key]);
    }
    
    更多相关内容
  • js中遍历Map对象的方法 console.log(jsonData);//火狐控制台打印输出: Object { fileNumber="文件编号", fileName="文件名称"} for(var key in jsonData) console.log("属性:" + key + ",值:"+ jsonData[key]);...
  • JavaScript Map对象

    千次阅读 2021-02-01 06:55:21
    JavaScript Map对象MapMap是一组键值对的结构,用于解决以往不能用对象做为键的问题具有极快的查找速度函数、对象、基本类型都可以作为键或值其实Map和对象非常相似,但是对象的键只能是String类型或Symbol类型,Map...

    JavaScript Map对象

    Map

    Map是一组键值对的结构,用于解决以往不能用对象做为键的问题

    具有极快的查找速度

    函数、对象、基本类型都可以作为键或值

    其实Map和对象非常相似,但是对象的键只能是String类型或Symbol类型,Map在这方面就显得自由开放,以下是Map与对象的对比。

    MapObject

    意外的键

    Map默认情况不包含任何键。只包含显式插入的键。

    一个 Object有一个原型, 原型链上的键名有可能和你自己在对象上的设置的键名产生冲突。注意:虽然 ES5 开始可以用 Object.create(null)来创建一个没有原型的对象,但是这种用法不太常见。

    键的类型

    一个 Map的键可以是任意值,包括函数、对象或任意基本类型。

    一个Object

    键的顺序

    Map中的 key 是有序的。因此,当迭代的时候,一个 Map对象以插入的顺序返回键值。

    一个 Object的键是无序的注意:自ECMAScript 2015规范以来,对象确实保留了字符串和Symbol键的创建顺序; 因此,在只有字符串键的对象上进行迭代将按插入顺序产生键。

    Size

    Map的键值对个数可以轻易地通过size属性获取

    Object的键值对个数只能手动计算

    迭代

    Map是 iterable的,所以可以直接被迭代。

    迭代一个Object需要以某种方式获取它的键然后才能迭代。

    性能

    在频繁增删键值对的场景下表现更好。

    在频繁添加和删除键值对的场景下未作出优化。

    声明定义

    使用Map()加上数组嵌套即可声明出一个Map容器。

    "use strict";

    let map= new Map([["k1", "v1"], ["k2", "v2"], ["k3", "v3"]]);

    console.log(mapinstanceof Map); //true

    console.log(map);//Map(3) {"k1" => "v1", "k2" => "v2", "k3" => "v3"}

    对于键是对象的Map, 键保存的是内存地址,值相同但内存地址不同的视为两个键。这个时候是不会引发值冲突的问题,如果是相同内存地址的对象则会引发值冲突。

    "use strict";

    let arr= ["云崖"]; //一个arr设置为了两个不同的键,这会引发值冲突的问题。

    let map= new Map([[arr, "v1"], ["k2", "v2"], [arr, "v3"]]);

    console.log(map);//Map(2) {Array(1) => "v3", "k2" => "v2"}

    新增数据

    使用set()方法为Map容器新增一组键值对。

    ?

    let map= newMap();

    ?

    map.set("k1","v1");

    map.set("k2","v2");

    ?

    console.log(map);//Map(2) {"k1" => "v1", "k2" => "v2"}

    ?

    获取数量

    使用size属性获取当前map容器中键值对的数量。

    ?

    let map= newMap();

    ?

    map.set("k1","v1");

    ?

    map.set("k2","v2");

    ?

    console.log(map.size);//2

    ?

    元素检测

    使用has()方法检测当前map容器中是否存在某个键,返回布尔值。

    注意:如果键是引用类型则必须要使用原本键对象的引用才行,单纯的形式相似是会返回false。

    ?

    let arr= new Array("云崖")

    ?

    let map= newMap();

    ?

    map.set(arr,"v1");

    ?

    map.set("k2","v2");

    ?

    console.log(map.has(arr));//true 来自同一引用

    console.log(map.has(["云崖"])); //false 不来自同一引用,这里的数组是新开辟的内存空间

    ?

    获取元素

    使用get()方法获取map容器中的一组键值对。

    ?

    let arr= new Array("云崖")

    ?

    let map= newMap();

    ?

    map.set(arr,"v1");

    ?

    map.set("k2","v2");

    ?

    console.log(map.get(arr));//v1

    ?

    console.log(map.get(["云崖"])); //undefined

    ?

    删除元素

    使用delete()方法删除map容器中的一组键值对。

    返回布尔值,true代表删除成功,false代表删除失败。

    ?

    let arr= new Array("云崖")

    ?

    let map= newMap();

    ?

    map.set(arr,"v1");

    ?

    map.set("k2","v2");

    ?

    console.log(map.delete(arr)); //true

    ?

    清空容器

    使用clear()方法可以使map容器清空。

    ?

    let arr= new Array("云崖")

    ?

    let map= newMap();

    ?

    map.set(arr,"v1");

    ?

    map.set("k2","v2");

    ?

    map.clear()

    ?

    console.log(map);//Map(0) {}

    ?

    数组转换

    可使用...语法或者Array.from()将Map转换为Array。

    20200730013011496237.png

    遍历操作

    迭代器创建

    使用 keys()/values()/entries()都可以返回可遍历的迭代对象。

    ?

    let map= new Map([["k1","v1"],["k2","v2"],["k3","v3"]]);

    ?

    console.log(map.keys());//拿到所有键

    ?

    console.log(map.values());//拿到所有值

    ?

    console.log(map.entries());//拿到所有键值对

    ?

    20200730013011747197.png

    forEach

    使用forEach遍历操作。

    ?

    let map= new Map([["k1", "v1"], ["k2", "v2"], ["k3", "v3"]]);

    ?

    map.forEach(function(key, value) {

    console.log(key,value);

    });

    ?

    20200730013011834106.png

    for/of

    使用for/of遍历操作,直播遍历map容器等同于使用遍历entries()函数

    ?

    let map= new Map([["k1", "v1"], ["k2", "v2"], ["k3", "v3"]]);

    ?for(let [key, value] of map) {

    console.log(key, value);

    }

    ?

    20200730013011834106.png

    WeakMap

    WeakMap对象是一组键/值对的集

    键名必须是对象

    WeakMap对键名是弱引用的,键值是正常引用

    垃圾回收不考虑WeakMap的键名,不会改变引用计数器,键在其他地方不被引用时即删除

    因为WeakMap是弱引用,由于其他地方操作成员可能会不存在,所以不可以进行forEach( )遍历等操作

    也是因为弱引用,WeakMap结构没有keys(),values(),entries()等方法和 size属性

    当键的外部引用删除时,希望自动删除数据时使用 WeakMap

    声明定义

    在 WeakMap中的键值只能是容器类型的对象,即引用类型,不能是值类型。

    ?

    let array= [1,2,3];

    ?

    let dict= {"k1":"v1","k2":"v2"};

    ?

    let map= new WeakMap([[array,"k1"],[dict,"k2"]]);

    ?

    console.log(map);//WeakMap {Array(3) => "k1", {…} => "k2"}

    ?

    值类型作为键会抛出异常。

    ?

    let array= [1,2,3];

    ?

    let dict= {"k1":"v1","k2":"v2"};

    ?

    let map= new WeakMap([[array,"k1"],[dict,"k2"],[3,"k3"]]);

    ?

    console.log(map);//Uncaught TypeError: Invalid value used as weak map key

    ?

    操作方法

    方法说明

    add()

    添加一组键值对,键必须是引用类型的对象。

    delete()

    删除一组键值对

    has()

    判断是否存在一个引用类型对象的键值对

    垃圾回收

    对于标记清除法来说,存在于WeakMap中的对象键并不会为其增加引用计数,因此也被称之为弱引用。

    当WeakMap中对象键的外部引用计数为0后,垃圾回收机制将清理 WeakMap容器中的该对象键,这会使得WeakMap容器中该对象键将被移除。

    ?

    let array= [1, 2, 3];

    ?

    let dict= { "k1": "v1", "k2": "v2"};

    ?

    let map= new WeakMap([[array, "v1"],[dict,"v2"]]);

    ?

    console.log(map);//array还在里面

    ?

    array= null; //清理,引用计数为0

    ?

    setInterval(()=>{

    ?

    console.log(map);//array 不在了

    ?

    },3000);

    ?

    20200730013012256930.png

    作用详解

    根据WeakMap这个特性,我们可以用它来保存一下经常存取的数据。

    当对象被删除后,我们不用管WeakMap容器中是否含存有该数据。

    展开全文
  • JS Map对象排序

    千次阅读 2022-03-26 16:00:23
    JSMap对象会按照元素的写入顺序来保存,有时我们想对Map中的对象进行排序应该怎么做呢?参考别人的回答这里做一个小小的总结; 假如有以下map var map=new Map(); map.set("b","8"); map.set("c","10"); map.set...

    JS 中Map对象会按照元素的写入顺序来保存,有时我们想对Map中的对象进行排序应该怎么做呢?参考别人的回答这里做一个小小的总结;

    假如有以下map

    var map=new Map();
    map.set("b","8");
    map.set("c","10");
    map.set("a","1");
    map.set("d","7");
    map.set("e","3");
    

    现在想根据value从小到大排序,首先转换为数组对象

    var arrayObj=Array.from(map);
    

    得到的arrayObj中索引0为map中的key,索引1为map中的value,下面可以采用数组的排序方法

    arrayObj.sort(function(a,b){return a[1]-b[1]})
    

    结果为:

    (5) [Array(2), Array(2), Array(2), Array(2), Array(2)]
    0: (2) ["a", "1"]
    1: (2) ["e", "3"]
    2: (2) ["d", "7"]
    3: (2) ["b", "8"]
    4: (2) ["c", "10"]
    length: 5
    __proto__: Array(0)
    

    如果是想按key排序,只需要更改一下sort方法为

    arrayObj.sort(function(a,b){return a[0].localeCompare(b[0])})
    

    结果为:

    (5) [Array(2), Array(2), Array(2), Array(2), Array(2)]
    0: (2) ["a", "1"]
    1: (2) ["b", "8"]
    2: (2) ["c", "10"]
    3: (2) ["d", "7"]
    4: (2) ["e", "3"]
    length: 5
    __proto__: Array(0)
    

    接下来可以这样转换为Map对象:

    var result = new Map(arrayObj.map(i => [i[0], i[1]));
    

    结果为:

    Map(5) {"a" => "1", "e" => "3", "d" => "7", "b" => "8", "c" => "10"}
    size: (...)
    __proto__: Map
    [[Entries]]: Array(5)
    0: {"a" => "1"}
    1: {"e" => "3"}
    2: {"d" => "7"}
    3: {"b" => "8"}
    4: {"c" => "10"}
    length: 5
    

    参考:

    1.Javascript Sort key value pair object based on value

    2.Convert object array to hash map, indexed by an attribute value of the Object

    展开全文
  • js遍历map对象

    2022-08-18 16:49:23
    console.log(“key名称是:”+key+“,key的值是:”+map[key]")var map = {"普通学生“:“17”,"研究生“:“5”,"教授“:“2”,};

    直接先看实际案例。

    当请求得到的数据不是json对象,而是map对象如理方式如下:

                                var map = result.data.map;
                                var infoText = "共有";
                                var i = 0;
                                for(var key in map)  {
                                    i++;
                                    if(i < Object.getOwnPropertyNames(map).length){
                                        infoText +=  (map[key]+"位"+key+",");
                                    } else {
                                        infoText +=  (map[key]+"位"+key);
                                    }
                                };
                                infoText += "荐购这本书。";
    

    遍历方法 example:

    var map = {"普通学生“:“17”,"研究生“:“5”,"教授“:“2”,};

    for(var key in map){
    console.log(“key名称是:”+key+“,key的值是:”+map[key]")
    }

    获取map长度:

    Object.getOwnPropertyNames(map).length;

    展开全文
  • js Map对象的用法

    万次阅读 多人点赞 2019-06-12 13:47:46
    MapMap是一组键值对的结构,具有极快的查找速度。 举个例子,假设要根据同学的名字查找对应的成绩,如果用Array实现,需要两个Array: var names = ['Michael', 'Bob', 'Tracy']; var scores = [95, 75, 85];...
  • Map类似于普通对象的使用,拥有键值对,但它的键不仅仅只是字符串而已,还可以是对象等其他数据类型。(7)forEach()用于遍历对象的元素,第一个参数代表值,第二个参数代表键,第三个参数代表整个对象。(3)has()...
  • Map实现表格里重复数据标红,Set进行数组去重
  • 已有的数据格式: let a={1:2,2:3} 目标数据格式: let a = [{key:1,value:2},{key:2,value:3}] 转换方式 for循环 let data = [] ; for (let key in a) { data.push({key: key, value: a[key]});...
  • Map 对标的是 Object,是一种类似于对象的键值对数据结构 不同于Object 的是Map 的键可以为任意类型的值(null 会被当做 undefined),而不仅仅为字符串 Map 的键值是有序的,可通过 size 获取长度 Map 在频繁增删...
  • 下面小编就为大家带来一篇js中遍历Map对象的简单实例。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
  • 最近在项目中使用ajax返回的是一个map对象,怎么遍历这个map对象?去网上查了好多,真正有用很少,终于让我想起自己以前一个需要遍历key=Value形式的对象,想了想这种方式,应该也对于map适用吧。所以试了下,成功了...
  • js Map对象封装

    2011-12-01 18:19:35
    js Map对象封装 和 java 的使用方法一样.
  • JavaScriptMap对象的用法

    千次阅读 2020-11-16 15:57:49
    JavaScript 标准之Map对象的用法定义构造函数属性与object对象相比方法map.clear()Map.delete(key)Map.has (key)Map.entries()Map.set(key, value)Map.get(key)Map.keys()Map.values()Map.forEach()Map\[@@iterator]...
  • JS中的Map对象

    千次阅读 2022-01-08 13:48:39
    1. js创建map对象 var map = new Map(); ...
  • 比如一个map,要把键名里面有交易这2个字的排在前面 { BCT_EXTRA_TRADE: "交易笔数不一致" BUSINESS_DATE: "交易时间错误" INSTRUMENT: "标的物问题" LCM: "交易数据不一致" PARTY: "交易对手问题" SYS: "系统...
  • 1创建map对象 var map = new Map() 2将键值放入map中 map.set(“key”,value) map.set(“mical”,20) 3根据key值获取map值 map.get(“mical”) //20 4删除map的指定对象 delete.map[key]或者map.delete(key) 5判断是...
  • JavaScript 标准之 Map对象

    千次阅读 2021-01-13 17:56:21
    原标题:JavaScript 标准之 Map对象 前沿一直以来使用数组和对象来定义数据模型,前几天在翻阅ES6语法的时候,突然发现有一种Map对象对操作键值对特别好用,而且代码更简洁明了,简直太棒了。今天,我们就来一步步...
  • 本文实例讲述了JS自定义对象实现Java中Map对象功能的方法。分享给大家供大家参考。具体分析如下: Java中有集合,Map等对象存储工具类,这些对象使用简易,但是在JavaScript中,你只能使用Array对象。 这里我创建一...
  • node js Map对象问题

    2021-07-18 20:59:13
    JavaScript的默认对象表示方式{}可以视为其他语言中的Map或Dictionary的数据结构,即一组键值对。但是JavaScript对象有个小问题,就是键必须是字符串。但实际上Number或者其他数据类型作为键也是非常合理的。 举个...
  • JSMap对象作为键的问题

    千次阅读 2019-03-04 14:12:47
    JSMap对象作为键的问题 ![《深入理解es6》](https://img-blog.csdnimg.cn/20190304141046943.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3NreTE...
  • JS——Map对象 Set对象

    2022-02-15 15:19:18
    Map 对象是存储键值对的集合,并且能够记住键的原始插入顺序。具有极快的查找速度。 创建 第一种:创建的时候进行初始化 let map = new Map([ [1, 'one'], [2, 'two'], [3, 'three'], ]); 第二种:创建空的Map...
  • jsmap对象简单实例 es6提供一个对象Map,其功能类似于java中的Map, 下面是java中的Map和js中的Map的简单对比: js中的Map.set()相当于java中的Map.put(), js中的Map.size相当于java中的Map.size();//在js中size是...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 229,069
精华内容 91,627
关键字:

js map对象