数据结构Map
Map数据结构类似于对象,是键值对的集合,传统的键只能用字符串,Map的键不限于字符串,各种类型的值(包括对象)都可以当作键。
如果 Map 的键是一个简单类型的值(数字、字符串、布尔值),则只要两个值严格相等,Map 将其视为一个键,比如0
和-0
就是一个键,布尔值true
和字符串true
则是两个不同的键。另外,undefined
和null
也是两个不同的键。虽然NaN
不严格相等于自身,但 Map 将其视为同一个键。
创建一个Map--使用new关键字创建
let map = new Map();
map.set(-0, 123);
map.get(+0) // 123
map.set(true, 1);
map.set('true', 2);
map.get(true) // 1
map.set(undefined, 3);
map.set(null, 4);
map.get(undefined) // 3
map.set(NaN, 123);
map.get(NaN) // 123
属性:size--返回Map结构的成员总数
const map = new Map();
map.set('foo', true);
map.set('bar', false);
map.size // 2
方法:
set(key,value)--设置key键名的值为value,然后返回整个Map结构,若key已经有值,则会更新。因为set()返回的是当前Map对象,因此,可以采用链式写法。
let map = new Map()
.set(1, 'a')
.set(2, 'b')
.set(3, 'c');
get(key)--读取key对应的值,若找不key,返回undefined
const m = new Map();
const hello = function() {console.log('hello');};
m.set(hello, 'Hello ES6!') // 键是函数
m.get(hello) // Hello ES6!
has(key)--返回一个布尔值,表示某个key是否在当前Map对象中
const m = new Map();
m.set('edition', 6);
m.set(262, 'standard');
m.set(undefined, 'nah');
m.has('edition') // true
m.has('years') // false
m.has(262) // true
m.has(undefined) // true
delete(key)--删除key键的值,删除成功返回ture,失败返回false
const m = new Map();
m.set(undefined, 'nah');
m.has(undefined) // true
m.delete(undefined)
m.has(undefined) // false
clear(key)--清除所有成员,没有返回值
let map = new Map();
map.set('foo', true);
map.set('bar', false);
map.size // 2 map.clear()
map.size // 0
遍历方法:
keys()返回键名的遍历器
let myMap = new Map([
['name', 'Liane'],
['age', 18],
['gender','female'],
['friends',[
{
'name': 'Ann',
'age': 18,
'gender': 'female'
},
{
'name': 'Lisa',
'age': 16,
'gender': 'female'
},
{
'name': 'jack',
'age': 18,
'gender': 'man'
}
]]
]);
let keys = myMap.keys();
console.log(keys); /*{'name','age','gender','friends'}*/
console.log(keys[0]) /*undefined*/
console.log(keys.name) /*undefined*/
console.log(keys.length) /*undefined*
console.log(keys.size) /*undefined*
console.log([...myMap.keys()])
/*['name','age','gender','friends']*/
values()返回键值的遍历器
console.log([...myMap.value()])
/*['liane',18,'female',Array(3)]*/
entries()返回所有成员的遍历器
console.log([...myMap.entries()])
/*[
['name', 'Liane'],
['age', 18],
['gender','female'],
['friends',Array(3)]
]*/
forEach()遍历Map所有成员,forEach可以接受第二参数用来绑定this,当传递第二个值绑定this时,第一个参数不能用箭头函数的写法(箭头函数里的this指向定义所处的对象,不会绑定第二个参数)
let reporter = {
report: (key,value)=>{
console.log('key:%s,value: %s',key,value)
}
}
myMap.forEach(function(val,key,map){
this.report(key,val)
},reporter)
for of遍历
/*遍历整个Map结构*/
for(let [key,value] of myMap) {
console.log('key:%s,value: %s',key,value)
}
/*遍历所有的key*/
for(let key of myMap.keys()){
console.log(key)
}
/*遍历所有的value*/
for(let value of myMap.values()){
console.log(value)
}
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。