乐趣区

关于es6:ES6-数据结构Map

数据结构 Map
Map 数据结构相似于对象,是键值对的汇合,传统的键只能用字符串,Map 的键不限于字符串,各种类型的值(包含对象)都能够当作键。
如果 Map 的键是一个简略类型的值(数字、字符串、布尔值),则只有两个值严格相等,Map 将其视为一个键,比方 0-0就是一个键,布尔值 true 和字符串 true 则是两个不同的键。另外,undefinednull 也是两个不同的键。尽管 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)
}
退出移动版