基本用法
Set类似于数组,而Map就类似于键值对(Key, Value);
JavaScript 的对象(Object),本质上是键值对的集合(Hash 结构),但是传统上只能用字符串当作键。
ES6 提供了 Map 数据结构。它类似于对象,也是键值对的集合,但是“键”的范围不限于字符串,各种类型的值(包括对象)都可以当作键。
const map = new Map([
['name', '张三'],
['age', '22']
]);
console.log(map)// Map(2){"name" => "张三", "age" => "22"}
console.log([...map])// [["name", "张三"],["age", "22"]]
操作方法
set(key, value)、get(key)
set()用于添加指定数据,并返回map对象。get()获取指定键名的值
const map = new Map([
['name', '张三'],
['age', '22']
]);
console.log(map.get('name'))// '张三'
//如果添加的键名存在的话,则替换值
console.log(map.set('name','老王'))//Map(2) {"name" => "老王", "age" => "22"}
console.log(map.set('sex','男'))// Map(3) {"name" => "老王", "age" => "22", "sex" => "男"}
has(key)、delete(key)、clear()
这三个和Set()中的方法使用基本一样
has() 查询指定键名的值,有则返回true,无则返回false
delete() 删除指定键名和它的值 ,删除成功返回true,删除失败返回false
clear()清空map对象,没有返回
const map = new Map([
['name', '张三'],
['age', '22']
]);
console.log(map.has('name'))//true
console.log(map.delete('name'))//true
console.log(map.clear())
console.log([...map])//[]
遍历方法
遍历方法
Map 结构原生提供三个遍历器生成函数和一个遍历方法。
keys():返回键名的遍历器。
values():返回键值的遍历器。
entries():返回所有成员的遍历器。
forEach():遍历 Map 的所有成员。
const map = new Map([
['name', '张三'],
['age', '22']
]);
for (let key of map.keys()) {
console.log(key);
}
// 'name'
// 'age'
for (let key of map.values()) {
console.log(key);
}
// '张三'
// '22'
for (let key of map.entries()) {
console.log(key);
}
// ['name', '张三']
// ['age', '22']
map.forEach((key, value) => console.log(`${key}:${value}`))
// 'name:张三'
//'age:22'
Map的应用
与其他数据结构的互相转换
(1)Map 转为对象
如果所有 Map 的键都是字符串,它可以无损地转为对象。
如果有非字符串的键名,那么这个键名会被转成字符串,再作为对象的键名。
function objMap(strMap) {
let obj = Object.create(null);
for (let [k,v] of strMap) {
obj[k] = v;
}
return obj;}
const myMap = new Map().set(name, '张三').set(age, '22');
console.log(objMap(myMap))
// {name: "张三", age: "22"}
(2)对象转为 Map
function objMap(obj) {
let map = new Map();
for (let k of Object.keys(obj)) {
map.set(k, obj[k]);
}
return map ;
}
console.log(objMap({ 'name':'张三', 'age': '22' }))// Map(2) {"name" => "张三", "age" => "22"}
(3)Map 转为 JSON
function objMap(strMap) {
return JSON.stringify(objMap(strMap));
}
let myMap = new Map().set(name, '张三').set(age, '22');
console.log(objMap(myMap))
// '{"name":"张三","age":"22"}'
(4)JSON 转为 Map
JSON 转为 Map,正常情况下,所有键名都是字符串。
function objMap(jsonStr) {
return objMap(JSON.parse(jsonStr));
}
console.log(objMap('{"name":"张三","age":"22"}'))
// Map {"name" => "张三", "age" => "22"}