一、概念
Set 是一种叫【字典(是一些元素的集合,以 [ 键,值 ] 的形式储存)】的数据结构。
二、
1、属性和操作方法
- size 返回 Map 的元素的个数。
- set() 增加一个新元素,返回当前的 Map。
- get() 返回键名对象的键值。
- delete() 删除某个元素的键名,返回 Boolean 值。
- has() 检测 Map 中是否包含某个元素,返回 Boolean 值。
- clear() 清空集合,返回undefined 。
const map = new Map();
map.set("foo", "aaaaa"); // {"foo" => 'aaaaa'}
map.set("bar", "bbbbb"); // {"foo" => 'aaaaa'}map.size; // 2
map.get("foo"); // aaaaa
map.has("foo"); // true
map.delete("bar"); // true
map.clear() // 数据清空 undefined
2、遍历
-
keys() 返回键名。
-
values() 返回键值。
- entries() 返回所有成员。
- forEach() 遍历 Map 所有成员。
const map = new Map([['F', 'no'],['T', 'yes'],
]);for (let key of map.keys()) {console.log(key);
}
// "F"
// "T"for (let value of map.values()) {console.log(value);
}
// "no"
// "yes"for (let item of map.entries()) {console.log(item[0], item[1]);
}
// "F" "no"
// "T" "yes"// 或者
for (let [key, value] of map.entries()) {console.log(key, value);
}
// "F" "no"
// "T" "yes"// 等同于使用map.entries()
for (let [key, value] of map) {console.log(key, value);
}
// "F" "no"
// "T" "yes"map.forEach(function(value, key, map) {console.log( key, value);
});// "F" "no"// "T" "yes"
3、与其他数据结构的相互转换
(1)、Map 转为数组
使用运算扩展符 【...】
const myMap = new Map().set(true, 7).set({ foo: 3 }, ["abc"]);console.log([...myMap]);// [ [ true, 7 ], [ { foo: 3 }, [ 'abc' ] ] ]
(2)、 数组转为 Map
const map = new Map([[1, 'one'],[2, 'two'],[3, 'three'],
]);
console.log(map)
// {1 => 'one', 2 => 'two', 3 => 'three'}
(3)、Map 转为对象
const strMapToObj = (strMap) => {let obj = Object.create(null);for (let [k, v] of strMap) {obj[k] = v;}console.log(obj); // { yes: true, no: false }return obj;
};const myMap = new Map().set("yes", true).set("no", false);
strMapToObj(myMap);
(4)、对象转为 Map
let obj = {"a":1, "b":2};
let map = new Map(Object.entries(obj));console.log(map) // {'a' => 1, 'b' => 2}