说明:

JavaScript的对象(Object),本质上是键值对的集合(Hash结构),但是传统上只能用字符串当作键。这给它的使用带来了很大的限制。
为了解决这个问题,ES6提供了Map数据结构。它类似于对象,也是键值对的集合,但是“键”的范围不限于字符串,各种类型的值(包括对象)都可以当作键。

定义: 键/值对的集合

1、let mapObj = new Map();
2、let mapObj = new Map([[key,value],[key,value]]); //默认带初始化参数的定义

如果Map的键是一个简单类型的值(数字、字符串、布尔值),则只要两个值严格相等,Map将其视为一个键,包括0和-0。另外,虽然NaN不严格相等于自身,但Map将其视为同一个键。

属性及方法:

(1)size属性

size属性返回Map结构的成员总数

let obj = new Map([['name', '张三'], ['age', 18], ['sex', '男']])
obj.size  //3

(2)set(key,value)

set方法设置key所对应的键值,然后返回整个Map结构。如果key已经有值,则键值会被更新,否则就新生成该键。

// 常用写法
let obj = new Map()
obj.set("age", 20)        // 键是字符串
obj.set(0, "attack_type")     // 键是数值
obj.set(undefined, "definition")     // 键是undefined

//set方法返回的是Map本身,也可以采用链式写法。
let map = new Map()
.set(1, 'a')
.set(2, 'b')

(3)get(key)

get方法读取key对应的键值,如果找不到key,返回undefined。

let obj = new Map()
obj.set("hello", 'Hello ES6!')
obj.get('hello')  // Hello ES6!
obj.get('word')  // undefined

(4)has(key)

has方法返回一个布尔值,表示某个键是否在Map数据结构中。

let obj = new Map()
obj.set("hello", 'Hello ES6!')
obj.has('hello')  // true
obj.has('word')  // false

(5)delete(key)

delete方法删除某个键,返回true。如果删除失败,返回false。

let obj = new Map()
obj.set("hello", 'Hello ES6!')
obj.has('hello')  // true
obj.delete('hello')
obj.has('hello')  // false

(6)clear()

clear方法清除所有成员,没有返回值。

let obj = new Map()
obj.set("hello", 'Hello ES6!')
obj.size // 1
obj.clear()
obj.size // 0

(7)遍历方法:

keys()、values()、entries()、forEach()
对映射中的每个元素执行指定操作

(8)toString

返回映射的字符串表示形式

(9)valueOf

返回指定对象的原始值

总结:在开发过程中,涉及到数据结构,能使用Map 不使用Array 尤其是复杂的数据结构 ,如果对于数组的存储考虑唯一性 使用Set ,优先使用map。

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐