一、map对象
map 对象保存键值对。任何值(对象或者原始值) 都可以作为一个键或一个值。
map中的键值是有序的。
let mymap = new map(); mymap.set("23","乔丹"); mymap.set("33","皮蓬"); let name = mymap.get("33"); console.log(name); //皮蓬 let has = mymap.has("24"); //查找是否含有此键 console.log(has); //false
map的迭代:
let mymap = new map(); mymap.set("23","乔丹"); mymap.set("33","皮蓬"); mymap.set("99","罗德曼"); //循环键 for (let key of mymap.keys()) { console.log(key); } //循环值 for (let value of mymap.values()) { console.log(value); } //循环键和值 for (let [key, value] of mymap) { console.log(key + " = " + value); } //或 for (let [key, value] of mymap.entries()) { console.log(key + " = " + value); } //使用foreach循环 mymap.foreach(function(value,key){ console.log(key + "=" + value); },mymap);
map 与 array的转换:
//二维数组转换成map对象 let arr = [[23,"乔丹"],[33,"皮蓬"],[99,"罗德曼"]]; let mymap = new map(arr); for (let [key, value] of mymap) { console.log(key + " = " + value); } //map对象转换成二维数组 let outarr = array.from(mymap); console.log(outarr);
map的克隆:
let mymap1 = new map([[23,"乔丹"],[33,"皮蓬"],[99,"罗德曼"]]); let mymap2 = new map(mymap1); for (let [key, value] of mymap2) { console.log(key + " = " + value); }
map的合并(合并两个 map 对象时,如果有重复的键值,则后面的会覆盖前面的)
let mymap1 = new map([[23,"乔丹"],[33,"皮蓬"],[99,"罗德曼"]]); let mymap2 = new map([[23,"詹姆斯"],[24,"科比"],[11,"姚明"]]); let mymap = new map([...mymap1,...mymap2]); //合并之后詹姆斯会替换乔丹 for (let [key, value] of mymap) { console.log(key + " = " + value); }
二、set对象
set 对象允许你存储任何类型的唯一值,无论是原始值或者是对象引用。
set 对象存储的值总是唯一的,所以需要判断两个值是否恒等。有几个特殊值需要特殊对待:
(1) +0 与 -0 在存储判断唯一性的时候是恒等的,所以不重复;
(2) undefined 与 undefined 是恒等的,所以不重复;
(3) nan 与 nan 是不恒等的,但是在 set 中只能存一个,不重复。
let myset = new set(); myset.add(1); myset.add("hello"); //这里体现了类型的多样性 myset.add(2); myset.add(1); //这里添加不了,这里体现了值的唯一性 console.log(myset); //{1,"hello",2} console.log(myset.has(3)); //false, 是否含有3
以下代码体现了对象之间引用不同不恒等,即使值相同,set 也能存储
let myset = new set(); let o = {a: 1, b: 2}; myset.add(o); myset.add({a: 1, b: 2}); console.log(myset);
set类型转换:
//array 转 set let arr = ["乔丹","皮蓬","罗德曼"]; let myset = new set(arr); console.log(myset); //set转array(使用...) let myset = new set(); myset.add("乔丹"); myset.add("皮蓬"); myset.add("罗德曼"); let arr = [...myset]; console.log(arr); //字符串转set(注:set中tostring方法是不能将set转换成string) let myset = new set("hello"); console.log(myset); //h e l o (两个l只出现一次)
set对象的作用:
//数组去重复 let myset = new set([1,2,1,2,3,3,4,5,6,4,7]); let arr = [...myset]; console.log(arr); //1,2,3,4,5,6,7 //数组求并集 let a = new set([1, 2, 3]); let b = new set([4, 3, 2]); let union = new set([...a, ...b]); let arr = [...union]; console.log(arr); //1, 2, 3, 4 //数组求交集 let a = new set([1, 2, 3]); let b = new set([4, 3, 2]); let intersect = new set([...a].filter(p=>b.has(p))); let arr = [...intersect]; console.log(arr); //2, 3
到此这篇关于es6基础语法之map和set对象的文章就介绍到这了。希望对大家的学习有所帮助,也希望大家多多支持代码网。
发表评论