ES6 Map对象与Set对象
Map 对象
Map 对象保存键值对。任何值(对象或者原始值) 都可以作为一个键或一个值。
一个 Object 的键只能是字符串或者 Symbols,但一个 Map 的键可以是任意值:字符串、对象、函数、NaN
1、set() 方法为Map对象添加一个指定键(key)和值(value)的新元素。返回Map对象。若已经存在键,则更新键值,否则,重新建立新键。
2、get() 方法用来获取一个 Map 对象中指定的元素。
var myMap = new Map(); var keyString = "0"; myMap.set(keyString, "zero"); myMap.get(keyString); // "字符串" myMap.get("0"); // "字符串" 因为 keyString === 'a string'
map.has(obj) // false
map.delete(obj) // true
//再加一个
myMap.set("1", "one");
myMap.size;//2获取数量
var outArray = Array.from(myMap);//[["0","zero"],["1","one"]] Map对象转化为数组,可以看出outArray是一个二维数组,可以通过outArray[0][0] 访问具体值
实例:判断有效的括号
var isValid = function(s) {//有效的括号 const n = s.length; if (n % 2 === 1) { return false; } const pairs = new Map([ [')', '('], [']', '['], ['}', '{'] ]); const stk = []; s.split('').forEach(ch => { if (pairs.has(ch)) { if (!stk.length || stk[stk.length - 1] !== pairs.get(ch)) { return false; } stk.pop(); } else { stk.push(ch); } }); return !stk.length; };
遍历Map方式:
for...of
var myMap = new Map(); myMap.set(0, "zero"); myMap.set(1, "one"); // 遍历map for (var [key, value] of myMap) { console.log(key + " = " + value); }
myMap.entries();//返回Iterator 对象,包含了 Map 对象中每个元素的 [key, value] 数组。
//Iterator对象:是一个引用型变量,为了遍历容器对象中的元素而不暴露容器对象内部的细节
myMap.keys();//返回Iterator 对象,包含了 Map 对象中每个元素的key。
//for(var key of myMap.keys())
myMap.values();//返回Iterator 对象,包含了 Map 对象中每个元素的value。
forEach()
// 将会显示两个 logs。 一个是 "0 = zero" 另一个是 "1 = one" myMap.forEach(function(value, key) { console.log(key + " = " + value); }, myMap)
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"}
set对象作用
1、数组去重
var mySet = new Set([1, 2, 3, 4, 4]); [...mySet]; // [1, 2, 3, 4] 直接输出mySet,是set对象。
2、并集
var a = new Set([1, 2, 3]); var b = new Set([4, 3, 2]); var union = new Set([...a, ...b]); // set(4) {1, 2, 3, 4}
var myArray = [...union];//[1,2,3,4] 数组与set对象互相转换的方法
3、交集、差集(略)