ES6中的Map与Set怎么用
这篇文章主要介绍了ES6中的Map与Set怎么用的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇ES6中的Map与Set怎么用文章都会有所收获,下面我们一起来看看吧。
Map 对象保存键值对。任何值(对象或者原始值) 都可以作为一个键或一个值。
Maps 和 Objects 的区别key 是字符串
varmyMap=newMap();varkeyString="astring";myMap.set(keyString,"和键'astring'关联的值");myMap.get(keyString);//"和键'astring'关联的值"myMap.get("astring");//"和键'astring'关联的值"//因为keyString==='astring'
key 是对象
varmyMap=newMap();varkeyObj={},myMap.set(keyObj,"和键keyObj关联的值");•myMap.get(keyObj);//"和键keyObj关联的值"myMap.get({});//undefined,因为keyObj!=={}
key 是函数
varmyMap=newMap();varkeyFunc=function(){},//函数myMap.set(keyFunc,"和键keyFunc关联的值");myMap.get(keyFunc);//"和键keyFunc关联的值"myMap.get(function(){})//undefined,因为keyFunc!==function(){}
key 是 NaN
varmyMap=newMap();myMap.set(NaN,"notanumber");myMap.get(NaN);//"notanumber"varotherNaN=Number("foo");myMap.get(otherNaN);//"notanumber"
虽然 NaN 和任何值甚至和自己都不相等(NaN !== NaN 返回true),NaN作为Map的键来说是没有区别的。
Map 的迭代对 Map 进行遍历,以下两个最高级。
for…of
varmyMap=newMap();myMap.set(0,"zero");myMap.set(1,"one");//将会显示两个log。一个是"0=zero"另一个是"1=one"for(var[key,value]ofmyMap){console.log(key+"="+value);}for(var[key,value]ofmyMap.entries()){console.log(key+"="+value);}/*这个entries方法返回一个新的Iterator对象,它按插入顺序包含了Map对象中每个元素的[key,value]数组。*///将会显示两个log。一个是"0"另一个是"1"for(varkeyofmyMap.keys()){console.log(key);}/*这个keys方法返回一个新的Iterator对象,它按插入顺序包含了Map对象中每个元素的键。*///将会显示两个log。一个是"zero"另一个是"one"for(varvalueofmyMap.values()){console.log(value);}/*这个values方法返回一个新的Iterator对象,它按插入顺序包含了Map对象中每个元素的值。*/
forEach()
varmyMap=newMap();myMap.set(0,"zero");myMap.set(1,"one");//将会显示两个logs。一个是"0=zero"另一个是"1=one"myMap.forEach(function(value,key){console.log(key+"="+value);},myMap)Map 对象的操作
Map 与 Array的转换
varkvArray=[["key1","value1"],["key2","value2"]];//Map构造函数可以将一个二维键值对数组转换成一个Map对象varmyMap=newMap(kvArray);//使用Array.from函数可以将一个Map对象转换成一个二维键值对数组varoutArray=Array.from(myMap);
Map 的克隆
varmyMap1=newMap([["key1","value1"],["key2","value2"]]);varmyMap2=newMap(myMap1);console.log(original===clone);//打印false。Map对象构造函数生成实例,迭代出新的对象。
Map 的合并
varfirst=newMap([[1,'one'],[2,'two'],[3,'three'],]);varsecond=newMap([[1,'uno'],[2,'dos']]);//合并两个Map对象时,如果有重复的键值,则后面的会覆盖前面的,对应值即uno,dos,threevarmerged=newMap([...first,...second]);Set 对象
Set 对象允许你存储任何类型的唯一值,无论是原始值或者是对象引用。
Set 中的特殊值Set 对象存储的值总是唯一的,所以需要判断两个值是否恒等。有几个特殊值需要特殊对待:
代码
letmySet=newSet();mySet.add(1);//Set(1){1}mySet.add(5);//Set(2){1,5}mySet.add(5);//Set(2){1,5}这里体现了值的唯一性mySet.add("sometext");//Set(3){1,5,"sometext"}这里体现了类型的多样性varo={a:1,b:2};mySet.add(o);mySet.add({a:1,b:2});//Set(5){1,5,"sometext",{…},{…}}//这里体现了对象之间引用不同不恒等,即使值相同,Set也能存储类型转换
Array
//Array转SetvarmySet=newSet(["value1","value2","value3"]);//用...操作符,将Set转ArrayvarmyArray=[...mySet];String//String转SetvarmySet=newSet('hello');//Set(4){"h","e","l","o"}//注:Set中toString方法是不能将Set转换成StringSet 对象作用
数组去重
varmySet=newSet([1,2,3,4,4]);[...mySet];//[1,2,3,4]
并集
vara=newSet([1,2,3]);varb=newSet([4,3,2]);varunion=newSet([...a,...b]);//{1,2,3,4}
交集
vara=newSet([1,2,3]);varb=newSet([4,3,2]);varintersect=newSet([...a].filter(x=>b.has(x)));//{2,3}
差集
vara=newSet([1,2,3]);varb=newSet([4,3,2]);vardifference=newSet([...a].filter(x=>!b.has(x)));//{1}
关于“ES6中的Map与Set怎么用”这篇文章的内容就介绍到这里,感谢各位的阅读!相信大家对“ES6中的Map与Set怎么用”知识都有一定的了解,大家如果还想学习更多知识,欢迎关注亿速云行业资讯频道。
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。