文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

JavaScript中Map数据结构是怎么样的

2023-06-28 23:39

关注

这篇“JavaScript中Map数据结构是怎么样的”文章,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要参考一下,对于“JavaScript中Map数据结构是怎么样的”,小编整理了以下知识点,请大家跟着小编的步伐一步一步的慢慢理解,接下来就让我们进入主题吧。

1.什么是 Map

Map 就是映射的意思,即从键到值的映射。

Map 保存键值对,并且能够记住键的原始插入顺序

那么它和 Object 有什么区别 ?

对象一般用字符串作键

const obj = {val : "object"}

任何值(对象或者原始值) 都可以作为 Map 的一个键或一个值

const m = new Map();;m.set('val', 'map');m.set(1, 'number');m.set(new Set([1, 2]), 'set');m.set({}, 'object');console.log(m);

JavaScript中Map数据结构是怎么样的

所以,在键值对的数据结构中,Map 比 Object 更为合适

2. Map 构造函数

对于 Set 的构造函数的参数,可以传递以下几种形式。

2.1) 数组

注意,要传递的是二维数组,因为二维数组才能体现出键值对

const m = new Map([    ['val', 'map'],    ['apple', 'fruit']]);console.log(m);

JavaScript中Map数据结构是怎么样的

2.2) Set

以 Set 作为参数,也要体现出键值对形式

对 Set 不了解的,想了解的可以看看下面这篇文章:JavaScript—Set

const m = new Map(new Set([    ['tigger', 'animal'],    ['orange', 'fruit']]));console.log(m);

JavaScript中Map数据结构是怎么样的

2.3) Map

const m1 = new Map([    ['watermelon', 'fruit'],    ['cat', 'animal']])const m2 = new Map(m1);console.log(m2);

JavaScript中Map数据结构是怎么样的

这里相当于把m1复制过去,给了m2,不过它们不是同一个 Map

console.log(m2 === m1);

JavaScript中Map数据结构是怎么样的

综上,Map 构造函数的参数要能体现出键值对的形式。

3. Map 的实例属性和方法

3.1) Map 的属性

size

Map 的属性,有一个属性size,用来存储它的成员个数

const m = new Map([    ['val', 'map'],    ['cat', 'animal'],    ['orange', 'fruit']]);console.log(m.size);

JavaScript中Map数据结构是怎么样的

3.2) Map 的方法

set

给 Map 中添加成员

const m = new Map();// 它的参数为两个,第一个为键,第二个为值m.set('val', 'map');console.log(m);// 可以连缀 Setm.set('orange', 'fruit').set('cat', 'animal');console.log(m);// 添加的新成员如果键已经存在了,那么将会覆盖它// 键的顺序不会发生改变,因为 Map 能够记住键的原始插入顺序m.set('orange', 'sweet');console.log(m);

JavaScript中Map数据结构是怎么样的

get

通过键获取 Map 的成员

const m = new Map([    ['val', 'map'],    ['orange', 'fruit'],    ['cat', 'animal'],    [true, 'false']]);console.log(m.get('val'));console.log(m.get(true));// 获取不存在的键时,会返回 undefinedconsole.log(m.get('tigger'));

JavaScript中Map数据结构是怎么样的

has

用来判断 Map 是否含有某个键

const m = new Map([    ['val', 'map'],    ['orange', 'fruit'],    ['cat', 'animal'],    [true, 'false']]);console.log(m.has(true));console.log(m.has('true'));

JavaScript中Map数据结构是怎么样的

delete

通过键,来删除 Map 中的成员

const m = new Map([    ['val', 'map'],    ['orange', 'fruit'],    ['cat', 'animal'],    [true, 'false']]);m.delete('cat');// 删除不存在的成员,将什么也不会发生,也不会报错m.delete('true');console.log(m);

JavaScript中Map数据结构是怎么样的

clear

删除 Map 的所有成员

const m = new Map([    ['val', 'map'],    ['orange', 'fruit'],    ['cat', 'animal'],    [true, 'false']]);m.clear();console.log(m);

JavaScript中Map数据结构是怎么样的

forEach

用来遍历 Map 的成员

它有两个参数,第一个参数为回调函数,第二个参数设定回调函数中this指向什么,即

m.forEach(回调函数, 回调函数的指向)

先来看第一个参数

m.forEach(function(value, key, map){value 就是 Map 的值key 就是 Map 的键map 就是前面Map的本身,即这里 map === m});

通过一个例子理解一下:

const m = new Map([    ['val', 'map'],    ['orange', 'fruit'],    ['cat', 'animal'],    [true, 'false']]);m.forEach(function(value, key, map) {    console.log(value, key, map == m);});const m = new Map([    ['val', 'map'],    ['orange', 'fruit'],    ['cat', 'animal'],    [true, 'false']]);m.forEach(function(value, key, map) {    console.log(value, key, map == m);});

JavaScript中Map数据结构是怎么样的

再来看第二个参数

const m = new Map([    ['val', 'map'],    ['orange', 'fruit'],    ['cat', 'animal'],    [true, 'false']]);m.forEach(function(value, key, map) {    console.log(this);}, document);const m = new Map([    ['val', 'map'],    ['orange', 'fruit'],    ['cat', 'animal'],    [true, 'false']]);m.forEach(function(value, key, map) {    console.log(this);}, document);

JavaScript中Map数据结构是怎么样的

4. Map的注意事项

Map 对键名是否相同的判断基本遵循严格相等===的判断

不过对于NaN,在 Set 中,NaN 等于 NaN

5. Map的使用场景

举个例子来看看 Map 的应用:

DOM元素进行操作

先写一个 HTML 代码:

<!DOCTYPE html><html lang="en"><head>    <meta charset="UTF-8">    <meta http-equiv="X-UA-Compatible" content="IE=edge">    <meta name="viewport" content="width=device-width, initial-scale=1.0">    <title>Map</title></head><body>    <p>one</p>    <p>two</p>    <p>three</p></body></html>

此时效果是这样的:

JavaScript中Map数据结构是怎么样的

然后对p元素进行修改:

<script>    // 利用数组解构赋值将 p 元素获取的同时解构出来    const [p1, p2, p3] = document.querySelectorAll('p');    const m = new Map([        [p1, new Map([            ['color', 'blue'],            ['fontSize', '40px']        ])],         [p2,  new Map([            ['color', 'orange'],            ['fontSize', '40px']        ])],         [p3,  new Map([            ['color', 'green'],            ['fontSize', '40px']        ])]    ]);    m.forEach((propMap, elem) => {        propMap.forEach((value, prop) => {            elem.style[prop] = value;        });    });</script>

JavaScript中Map数据结构是怎么样的

以上是“JavaScript中Map数据结构是怎么样的”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注编程网行业资讯频道!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     801人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     348人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     311人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     432人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     220人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯