「这是我参与2022首次更文挑战的第28天,活动详情查看:2022首次更文挑战」。
Map
基本概念
- 数据类型类似于对象
- 对象是键对应值,键必须是字符串,而map的键不局限于字符串,可以是任何类型,包括对象也可以作为键,值对值
Map和Object的区别
- object的键只能是字符串或者Symbol,但Map的键可以是任意值
- Map的键值是有序的,对象的键不是
- Map的键值对个数可以从size获取,而Object的键值对个数只能手动计算
新建一个Map
console.log(new Map([["a",1]]));
const s1 = new Set([
['foo', 1],
['bar', 2]
]);
const m1 = new Map(s1);
console.log(m1);
console.log(m1.get('foo')); // 1
let obj1 = { a:1 }
let map = new Map([
['a',1],
[[1,2,3],2],
[{},3],
[obj1,'obj'],
[null,'obj1111'],
[null,'obj1112']
]);
console.log(map);
console.log(map.get(null));
输出结果
基本属性
- size 返回map的长度
- get 获取对应key的value
- has 判断是否存在某属性
- delete 删除某属性
- clear 清空属性
console.log("设置size的返回值");
console.log(map.size); // 返回map长度
console.log("这是set的返回值");
console.log(map.set("b", 1).set("bb",222)); // 返回 map本身 所以可以用连缀的方法继续写set
console.log("这是get的返回值");
console.log(map.get("b")); // 返回 相对的value
console.log("这是has的返回值");
console.log(map.has("b")); // 返回 true 或者false
console.log("这是delete的返回时");
console.log(map.delete("b")); // 返回 true或者false
console.log("这是clear的返回值");
console.log(map.clear()); // 没有返回值
map的键和值
获取map 所有的键 所有的值 所有的键和值
console.log(map.keys());
console.log(map.values());
console.log(map.entries());
map.forEach(function (values,keys) {
console.log("keys " + keys + " values " + values);
})
Map的遍历和过滤
结合数组的map方法、filter方法,可以实现Map的遍历和过滤(Map本身没有map和filter方法)。
const map0 = new Map()
.set(1, 'a')
.set(2, 'b')
.set(3, 'c');
const map1 = new Map(
[...map0].filter(([k, v]) => k < 3)
);
// 产生 Map 结构 {1 => 'a', 2 => 'b'}
const map2 = new Map(
[...map0].map(([k, v]) => [k * 2, '_' + v])
);
// 产生 Map 结构 {2 => '_a', 4 => '_b', 6 => '_c'}
map 转为数组 使用扩展运算符(...)
数组 转为 Map 将数组传入 Map 构造函数,就可以转为 Map
Map的合并
var first = new Map([[1, 'one'], [2, 'two'], [3, 'three'],]);
var second = new Map([[1, 'uno'], [2, 'dos']]);
// 合并两个 Map 对象时,如果有重复的键值,则后面的会覆盖前面的,对应值即 uno,dos, three
var merged = new Map([...first, ...second]);
以上就是es6中新增的数据类型map了,使用好map可以给我们带来很大的便利。希望本文对你有帮助。