本文实例讲述了ES6 Map结构的应用。分享给大家供大家参考,具体如下:
Map 数据结构类似于对象,也是键值对的集合,但是“键”的范围不限于字符串,各种类型的值(包括对象)都可以当作键。也就是说,Object 结构提供了“字符串—值”的对应,Map 结构提供了“任何—值”的对应,是一种更完善的 Hash 结构实现。如果你需要“键值对”的数据结构,Map 比 Object 更合适。
初识map
var obj = { 'name':'Joh', qq:'5222', 'full name':'Johnny' }; let map = new Map(); map .set(obj, 'Hello map') .set('haha', 12) .set(52, obj) .set(NaN, new Set([1,2,3])); console.log(map); console.log(map.size); // 4
Map可以连续set,就像Set可以连续add一样,同样有size的api
map 的delete, has方法
var obj = { 'name':'Joh', qq:'5222', 'full name':'Johnny' }; var arr = [1,2]; let map = new Map(); // map 可以连续set map .set(obj,'11') .set(11,3) .set(12,'H') .set(arr,'h'); var delRes = map.delete(obj); // map不可以连续 delete console.log(delRes); // true var hasBool1 = map.has(11); console.log(hasBool1); // true var hasBool2 = map.has(arr); console.log(hasBool2); // true console.log(map.size); // 3
NaN在map上的特殊性与clear方法
let map = new Map(); // map 可以连续set map .set(11,3) .set(12,'H') .set(NaN,'h1') .set(NaN,'h2'); // 覆盖前值 console.log(map.get(NaN)); // h2 map.clear(); console.log(map.size); // 0
和set相同,NaN在map上具有唯一性,clear方法会将集合清空
map 的构造函数参数的传递,取值get方法,keys方法,values方法
let map = new Map([ ['name','Joh'], ['age',10] ]); let name = map.get('name'); let age = map.get('age'); console.log(name); // Joh console.log(age); // 10 let keys = map.keys(); for(let k of keys) { console.log(k); // 分别输出 name 和 age } let values = map.values(); for(let v of values) { console.log(v); // 分别输出 Joh 和 10 }
map与set的原型属性比较和map使用entries方法获得数据的实体
let map = new Map([ ['name','Joh'], ['age',10] ]); console.log(Set.prototype[Symbol.iterator] === Set.prototype.values); // true console.log(Map.prototype[Symbol.iterator] === Map.prototype.values); // false console.log(Map.prototype[Symbol.iterator] === Map.prototype.entries); // true let entries = map.entries(); for (let en of entries) { console.log(en); // 分别输出 ['name','Joh'] 和 ['age',10] }
map内forEach方法和对象传递,以及内部this的使用
let map = new Map([ ['name','Joh'], ['age',10] ]); var me = { name:"Joh" }; map.forEach(function (val, key) { console.log(key, val); // 分别输出 name Joh 和 "age" 10 }); console.log('>>>>>'); map.forEach(function (val, key) { // console.log(key, val); // 分别输出 name Joh 和 "age" 10 console.log(this); // {name: "Joh"} 此处的this就是传递进来的对象 }, me);
更多关于JavaScript相关内容感兴趣的读者可查看本站专题:《JavaScript数组操作技巧总结》、《JavaScript排序算法总结》、《JavaScript数学运算用法总结》、《JavaScript数据结构与算法技巧总结》、《JavaScript遍历算法与技巧总结》、《JavaScript查找算法技巧总结》及《JavaScript错误与调试技巧总结》
希望本文所述对大家JavaScript程序设计有所帮助。
本文向大家介绍JVM内存结构划分实例解析,包括了JVM内存结构划分实例解析的使用技巧和注意事项,需要的朋友参考一下 这篇文章主要介绍了JVM内存结构划分实例解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 数据区域划分 运行时内存区域划分:程序计数器、虚拟机栈、本地方法栈、堆、方法区 程序计数器 线程私有 通过寄存器实现 不会存在运行溢出 当前
本文向大家介绍json的结构与遍历方法实例分析,包括了json的结构与遍历方法实例分析的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了json的结构与遍历方法。分享给大家供大家参考,具体如下: 第一种json结构: 遍历的方法是: 第二种json结构: 遍历方法: PS:关于json操作,这里再为大家推荐几款比较实用的json在线工具供大家参考使用: 在线JSON代码检验、检验、美化、格式
本文向大家介绍C#中类与结构的区别实例分析,包括了C#中类与结构的区别实例分析的使用技巧和注意事项,需要的朋友参考一下 类与结构是C#程序设计中基本的数据类型,而初学者往往不能很好的分清二者之间的区别。本文就以附带实例形式加以说明。具体如下: 一、基本概念: 类:引用类型,存储在堆中,栈中存储引用地址,在方法的传输中只是传输地址的引用,修改指向的对象会影响原有对象的值,传输中消耗内存小。 结构:值
本文向大家介绍thinkphp文件引用与分支结构用法实例,包括了thinkphp文件引用与分支结构用法实例的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了thinkphp文件引用与分支结构用法。分享给大家供大家参考。具体分析如下: 一、导入CSS和JS文件 1、css link : js src : 2、import 3、load 二、分支结构 1、if 补充: > gt < lt
本文向大家介绍Java线程池的应用实例分析,包括了Java线程池的应用实例分析的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了Java线程池的应用。分享给大家供大家参考,具体如下: 一 使用Future与Callable来计算斐波那契数列 1 代码 2 运行 计算第10个斐波那契级数,过会来取... 忙别的去吧,结果还在计算中... 忙别的去吧,结果还在计算中... 忙别的去吧,结果还在计
实际上,Vuex 在怎么组织你的代码结构上面没有任何限制,相反,它强制规定了一系列高级的原则: 应用级的状态集中放在 store 中。 改变状态的唯一方式是提交mutations,这是个同步的事务。 异步逻辑应该封装在action 中。 只要你遵循这些规则,怎么构建你的项目的结构就取决于你了。如果你的 store 文件非常大,仅仅拆分成 action、mutation 和 getter 多个文件即