重走es6之map对象

本文主要介绍了JavaScript中Map对象,它是更完善的Hash结构,提供“值—值”对应。文中对比了Maps和Objects的区别,如键的类型、顺序等。还介绍了Map对象的API,如get、has等方法,最后阐述了Map与Array的转换、克隆和合并等操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

map对象

Map类似于对象,也是键值对的集合,但是“键”的范围不限于字符串,各种类型的值(包括 对象)都可以当作键。也就是说,Object 结构提供了“字符串—值”的对应,Map结构提供了“值— 值”的对应,是一种更完善的 Hash 结构实现。如果你需要“键值对”的数据结构,Map 比 Object 更合适。Map 可以接受一个数组作为参数。该数组的成员是一个个表示键值对的数组。

//Map 可以接受一个数组作为参数。该数组的成员是一个个表示键值对的数组
var map = new Map([ ['name', '张三'], ['title', 'Author'] ]);
console.log(map)

Maps 和 Objects 的区别

  • 一个 Object 的键只能是字符串或者 Symbols,但一个 Map 的键可以是任意值
  • Map 中的键值是有序的(FIFO 原则),而添加到对象中的键则不是
  • Map 的键值对个数可以从 size 属性获取,而 Object 的键值对个数只能手动计算
  • Object 都有自己的原型,原型链上的键名有可能和你自己在对象上的设置的键名产生冲突

map对象的API

  • Map.size 返回 Map 结构的成员总数。
  • Map.get(key) get方法读取key对应的键值,如果找不到key,返回undefined。
  • Map.has(key) has方法返回一个布尔值,表示某个键是否在当前 Map 对象之中
  • Map.delete(key) delete方法删除某个键,返回true。如果删除失败,返回false。
  • Map.clear() 清除所有成员,没有返回值
  • Map.keys() 返回键名的遍历器
  • Map.values() 返回键值的遍历器
  • Map.entries() 返回键值对的遍历器
  • Map.forEach() 使用回调函数遍历每个成员

下面给出一个完整的例子,帮助理解


//Map 可以接受一个数组作为参数。该数组的成员是一个个表示键值对的数组
var map = new Map([ ['name', '张三'], ['title', 'Author'] ]);
map.Map(1,'dsadas')
console.log(map.size) //3
console.log(map.get('name'))  //张三
console.log(map.has('title'))  //true
console.log(map.keys())  //[Map Iterator] { 'name', 'title', 1 }
console.log(map.values())   //[Map Iterator] { '张三', 'Author', 'dsadas' }
/*
[Map Entries] {
  [ 'name', '张三' ],
  [ 'title', 'Author' ],
  [ 1, 'dsadas' ]
}
*/
console.log(map.entries()) 
console.log(map,'未删除前')  //Map { 'name' => '张三', 'title' => 'Author', 1 => 'dsadas' } 未删除前
/* 遍历结果为:
name 张三
title Author
1 dsadas
*/ 
map.forEach((values,keys)=>{
    console.log(keys,values)
})
console.log(map.delete(1))  //true
console.log(map,"删除后")   //Map { 'name' => '张三', 'title' => 'Author' } 删除后
console.log(map.clear())
console.log(map,"清除所有后")

Map 对象的操作

Map 与 Array的转换

//Map 与 Array的转换
let arr=[['key1','values1'],['key2','values2']]
let map =new Map(arr);
console.log(map)     //Map { 'key1' => 'value1', 'key2' => 'value2' }
let transition=Array.from(map)
console.log(transition)  //[ [ 'key1', 'values1' ], [ 'key2', 'values2' ] ]
Map 的克隆
//map的克隆
var myMap1 = new Map([["key1", "value1"], ["key2", "value2"]]);
var myMap2 = new Map(myMap1);
 
console.log(myMap1===myMap2);   //false
// 打印 false。 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]);
console.log(merged)  //Map { 1 => 'uno', 2 => 'dos', 3 => 'three' }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值