说说常用的Map对象

118 阅读2分钟

「这是我参与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));

输出结果 QQ图片20220221170903.png

基本属性

  • 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可以给我们带来很大的便利。希望本文对你有帮助。