这篇文章主要介绍了es6中的Map与Set怎么用的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇ES6中的Map与Set怎么用文章都会有所收获,下面我们一起来看看吧。Map 对象Map 对象保存键值对。任何值(对
这篇文章主要介绍了es6中的Map与Set怎么用的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇ES6中的Map与Set怎么用文章都会有所收获,下面我们一起来看看吧。
Map 对象保存键值对。任何值(对象或者原始值) 都可以作为一个键或一个值。
key 是字符串
var myMap = new Map();var keyString = "a string";myMap.set(keyString, "和键'a string'关联的值");myMap.get(keyString); // "和键'a string'关联的值"myMap.get("a string"); // "和键'a string'关联的值" // 因为 keyString === 'a string'
key 是对象
var myMap = new Map();var keyObj = {},myMap.set(keyObj, "和键 keyObj 关联的值");•myMap.get(keyObj); // "和键 keyObj 关联的值"myMap.get({}); // undefined, 因为 keyObj !== {}
key 是函数
var myMap = new Map();var keyFunc = function () {}, // 函数myMap.set(keyFunc, "和键 keyFunc 关联的值");myMap.get(keyFunc); // "和键 keyFunc 关联的值"myMap.get(function() {}) // undefined, 因为 keyFunc !== function () {}
key 是 NaN
var myMap = new Map();myMap.set(NaN, "not a number");myMap.get(NaN); // "not a number"var otherNaN = Number("foo");myMap.get(otherNaN); // "not a number"
虽然 NaN 和任何值甚至和自己都不相等(NaN !== NaN 返回true),NaN作为Map的键来说是没有区别的。
对 Map 进行遍历,以下两个最高级。
for…of
var myMap = new Map();myMap.set(0, "zero");myMap.set(1, "one");// 将会显示两个 log。 一个是 "0 = zero" 另一个是 "1 = one"for (var [key, value] of myMap) { console.log(key + " = " + value);}for (var [key, value] of myMap.entries()) { console.log(key + " = " + value);}// 将会显示两个log。 一个是 "0" 另一个是 "1"for (var key of myMap.keys()) { console.log(key);}// 将会显示两个log。 一个是 "zero" 另一个是 "one"for (var value of myMap.values()) { console.log(value);}
forEach()
var myMap = new Map();myMap.set(0, "zero");myMap.set(1, "one");// 将会显示两个 logs。 一个是 "0 = zero" 另一个是 "1 = one"myMap.forEach(function(value, key) { console.log(key + " = " + value);}, myMap)
Map 与 Array的转换
var kvArray = [["key1", "value1"], ["key2", "value2"]];// Map 构造函数可以将一个 二维 键值对数组转换成一个 Map 对象var myMap = new Map(kvArray);// 使用 Array.from 函数可以将一个 Map 对象转换成一个二维键值对数组var outArray = Array.from(myMap);
Map 的克隆
var myMap1 = new Map([["key1", "value1"], ["key2", "value2"]]);var myMap2 = new Map(myMap1);console.log(original === clone);// 打印 false。 Map 对象构造函数生成实例,迭代出新的对象。
Map 的合并
var first = new Map([[1, 'one'], [2, 'two'], [3, 'three'],]);var second = new Map([[1, 'uno'], [2, 'dos']]);// 合并两个 Map 对象时,如果有重复的键值,则后面的会覆盖前面的,对应值即 uno,dos, threevar merged = new Map([...first, ...second]);
Set 对象允许你存储任何类型的唯一值,无论是原始值或者是对象引用。
Set 对象存储的值总是唯一的,所以需要判断两个值是否恒等。有几个特殊值需要特殊对待:
代码
let mySet = new Set();mySet.add(1); // Set(1) {1}mySet.add(5); // Set(2) {1, 5}mySet.add(5); // Set(2) {1, 5} 这里体现了值的唯一性mySet.add("some text");// Set(3) {1, 5, "some text"} 这里体现了类型的多样性var o = {a: 1, b: 2};mySet.add(o);mySet.add({a: 1, b: 2});// Set(5) {1, 5, "some text", {…}, {…}}// 这里体现了对象之间引用不同不恒等,即使值相同,Set 也能存储
Array
// Array 转 Setvar mySet = new Set(["value1", "value2", "value3"]);// 用...操作符,将 Set 转 Arrayvar myArray = [...mySet];String// String 转 Setvar mySet = new Set('hello'); // Set(4) {"h", "e", "l", "o"}// 注:Set 中 toString 方法是不能将 Set 转换成 String
数组去重
var mySet = new Set([1, 2, 3, 4, 4]);[...mySet]; // [1, 2, 3, 4]
并集
var a = new Set([1, 2, 3]);var b = new Set([4, 3, 2]);var uNIOn = new Set([...a, ...b]); // {1, 2, 3, 4}
交集
var a = new Set([1, 2, 3]);var b = new Set([4, 3, 2]);var intersect = new Set([...a].filter(x => b.has(x))); // {2, 3}
差集
var a = new Set([1, 2, 3]);var b = new Set([4, 3, 2]);var difference = new Set([...a].filter(x => !b.has(x))); // {1}
关于“ES6中的Map与Set怎么用”这篇文章的内容就介绍到这里,感谢各位的阅读!相信大家对“ES6中的Map与Set怎么用”知识都有一定的了解,大家如果还想学习更多知识,欢迎关注编程网精选频道。
--结束END--
本文标题: ES6中的Map与Set怎么用
本文链接: https://www.lsjlt.com/news/313777.html(转载时请注明来源链接)
有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
下载Word文档到电脑,方便收藏和打印~
2024-05-03
2024-05-03
2024-05-03
2024-05-03
2024-05-03
2024-05-03
2024-05-03
2024-05-03
2024-05-03
2024-05-03
回答
回答
回答
回答
回答
回答
回答
回答
回答
回答
0