ES6新数据结构Map功能与用法示例

发布时间 - 2026-01-11 00:27:34    点击率:

本文实例讲述了ES6新数据结构Map功能与用法。分享给大家供大家参考,具体如下:

新数据结构Map

JavaScript中对象的本质是键值对的集合,但是键只能是字符串。为了弥补这种缺憾,ES6带来了一种新的数据结构Map。Map也是键值对的集合,只是键不仅可以是字符串还可以是其他数据类型,比如:对象(是不是很神奇)。请看下面例子。

var m = new Map();
var ul = document.getElementsByTagName('ul');
m.set(ul,'hi');
console.log(m.get(ul)); //hi

对于Map的操作有以下几个:

m.set(ul,'content'); //为Map增加成员
m.get(ul);//获取键 ul对应的值
m.has(ul);//返回布尔值,判断是否含有键 ul
m.delete(ul);//删除键 ul,成功返回true,失败返回false
m.size //返回m长度
m.clear(); //清除m所有成员

直接为Map赋初值的方法:

var m = new Map([[li_1,'hello'],[li_2,'world']]);

接受的参数为一个数组,数组内的成员是表示一个一个键值对的数组。如果你蒙了,请看上行代码的实际执行情况:

var li_1 = document.getElementsByTagName('li')[0];
var li_2 = document.getElementsByTagName('li')[1];
var list = [ [li_1,'hello'] , [li_2,'world'] ];
var m = new Map();
list.forEach( ([key,value]) => m.set(key,value) );
console.log(m.get(li_1)); //hello

如果对一个键多次赋值,后面的值会覆盖前面的值。值得注意的是,当键是对象时,必须是引用相同,才认为键是相同的。下面介绍Map的遍历方法。

var ul = document.getElementsByTagName('ul');
var li_1 = document.getElementsByTagName('li')[0];
var li_2 = document.getElementsByTagName('li')[1];
var list = [ [li_1,'hello'] , [li_2,'world'] ];
var m = new Map();
list.forEach( ([key,value]) => m.set(key,value) );
for ( let key of m.keys() ){
  console.log(key);
}
for ( let val of m.values() ){
  console.log(val);
}
for ( let item of m.entries() ){
  console.log(item[0],item[1]);
}
for ( let [key,val] of m.entries() ){
  console.log(key,val);
}
m.forEach( function( val , key , ul ){
  console.log( this ); //ul
  console.log( val , key);
} , ul ); // forEach的第二个参数用于改变匿名函数中this指向

Map与其他数据类型的转换

Map转数据的最简单方式是使用 ... 扩展运算符。例如:

console.log( ...m ); //[li, "hello"] [li, "world"]

Map转对象时,必须所有键都是字符串,使用Object.create()函数。Map转JSON时,要求也要求所有键都是字符串,使用JSON.Stringify()函数。

希望本文所述对大家ECMAScript程序设计有所帮助。


# ES6  # 数据结构  # Map  # 浅谈es6 javascript的map数据结构  # 详解ES6中的 Set Map 数据结构学习总结  # ES6新特性五:Set与Map的数据结构实例分析  # ES6学习笔记之Set和Map数据结构详解  # JavaScript中的Map数据结构详解  # 都是  # 键值  # 的是  # 几个  # 如果你  # 还可以  # 遍历  # 不是很  # 带来了  # 第二个  # 给大家  # 最简单  # 所述  # 程序设计  # 执行情况  # 蒙了  # 运算符  # 判断是否  # 转数 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: EditPlus中的正则表达式实战(6)  详解免费开源的.NET多类型文件解压缩组件SharpZipLib(.NET组件介绍之七)  厦门模型网站设计制作公司,厦门航空飞机模型掉色怎么办?  JavaScript如何实现路由_前端路由原理是什么  Laravel如何实现用户注册和登录?(Auth脚手架指南)  Google浏览器为什么这么卡 Google浏览器提速优化设置步骤【方法】  如何快速生成高效建站系统源代码?  如何续费美橙建站之星域名及服务?  lovemo网页版地址 lovemo官网手机登录  高性价比服务器租赁——企业级配置与24小时运维服务  浅谈Javascript中的Label语句  Laravel怎么进行数据库回滚_Laravel Migration数据库版本控制与回滚操作  微博html5版本怎么弄发超话_超话进入入口及发帖格式要求【教程】  js实现获取鼠标当前的位置  Laravel如何实现多对多模型关联?(Eloquent教程)  香港服务器选型指南:免备案配置与高效建站方案解析  Laravel如何理解并使用服务容器(Service Container)_Laravel依赖注入与容器绑定说明  Laravel如何实现模型的全局作用域?(Global Scope示例)  Laravel如何设置自定义的日志文件名_Laravel根据日期或用户ID生成动态日志【技巧】  高防服务器租用指南:配置选择与快速部署攻略  Laravel队列由Redis驱动怎么配置_Laravel Redis队列使用教程  Laravel任务队列怎么用_Laravel Queues异步处理任务提升应用性能  专业企业网站设计制作公司,如何理解商贸企业的统一配送和分销网络建设?  Laravel如何与Inertia.js和Vue/React构建现代单页应用  新三国志曹操传主线渭水交兵攻略  Laravel如何实现API版本控制_Laravel版本化API设计方案  如何在宝塔面板中创建新站点?  Laravel如何使用Collections进行数据处理?(实用方法示例)  中山网站制作网页,中山新生登记系统登记流程?  java获取注册ip实例  Linux系统运维自动化项目教程_Ansible批量管理实战  Laravel如何实现一对一模型关联?(Eloquent示例)  iOS UIView常见属性方法小结  PHP 实现电台节目表的智能时间匹配与今日/明日轮播逻辑  音响网站制作视频教程,隆霸音响官方网站?  Laravel 419 page expired怎么解决_Laravel CSRF令牌过期处理  在线教育网站制作平台,山西立德教育官网?  Laravel的.env文件有什么用_Laravel环境变量配置与管理详解  Laravel如何使用Telescope进行调试?(安装和使用教程)  如何在 Python 中将列表项按字母顺序编号(a.、b.、c. …)  进行网站优化必须要坚持的四大原则  Laravel如何使用Gate和Policy进行权限控制_Laravel权限判定与策略规则配置  Laravel如何实现数据库事务?(DB Facade示例)  公司门户网站制作流程,华为官网怎么做?  Edge浏览器提示“由你的组织管理”怎么解决_去除浏览器托管提示【修复】  ,怎么在广州志愿者网站注册?  齐河建站公司:营销型网站建设与SEO优化双核驱动策略  头像制作网站在线观看,除了站酷,还有哪些比较好的设计网站?  Laravel如何实现API版本控制_Laravel API版本化路由设计策略  Win11怎么设置虚拟桌面 Win11新建多桌面切换操作【技巧】