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。
本文来自博客园,作者:喆星高照,转载请注明原文链接:https://www.cnblogs.com/houxianzhou/p/13529933.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?