ECMAScript-----(八)Map数据结构
背景
JS的对象(Object)本质上是键值对的集合(Hash结构),传统上只能用字符串当成键,即Object提供了“字符串--值”的对应,Map结构解决了这一问题,提供了“值--值”的对应,是一种更完善的Hash结构实现
说明
类似于对象,但“键”可使用任意类型值
map实例的属性和方法
-
属性
//size属性 let map = new Map(); map.set('foo', true); map.set('bar', false); map.size // 2
-
方法
- 遍历方法
- keys()
let map = new Map([ ['F', 'no'], ['T', 'yes'], ]); for (let key of map.keys()) { console.log(key); } // "F" // "T"
- values()
for (let value of map.values()) { console.log(value); } // "no" // "yes"
- entries()
for (let item of map.entries()) { console.log(item[0], item[1]); } // "F" "no" // "T" "yes" //等同于 for (let [key, value] of map.entries()) { console.log(key, value); } //等同于 for (let [key, value] of map) { console.log(key, value); }
- foreach()
map.forEach(function(value, key, map) { console.log("Key: %s, Value: %s", key, value); }); //foreach可接受第二个参数,用来绑定this var reporter = { report: function(key, value) { console.log("Key: %s, Value: %s", key, value); } }; map.forEach(function(value, key, map) { this.report(key, value); }, reporter);
- keys()
- 操作方法
- set(key,value)
var m = new Map(); m.set("edition", 6) // 键是字符串 m.set(262, "standard") // 键是数值 m.set(undefined, "nah") // 键是undefined //set方法返回的是Map本身,故可使用链式写法 let map = new Map() .set(1, 'a') .set(2, 'b') .set(3, 'c');
- get(key)
var m = new Map(); var hello = function() {console.log("hello");} m.set(hello, "Hello ES6!") // 键是函数 m.get(hello) // Hello ES6! //get方法返回key对应的键值,如果找不到key,则返回undefined
- has(key)
var 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 //has方法返回一个bool值,表示某个键是否存在Map数据结构中
- delete(key)
var m = new Map(); m.set(undefined, "nah"); m.has(undefined) // true m.delete(undefined) m.has(undefined) // false
- clear()
let map = new Map(); map.set('foo', true); map.set('bar', false); map.size // 2 map.clear() map.size // 0 //clear方法清除所有成员,没有返回值
- set(key,value)
- 遍历方法
注意
- map.get(key)取值为何为undefined?
var map = new Map(); map.set(['a'], 555); map.get(['a']) // undefined //解析:与【”a“】===【”a“】判断为false一样,需要将数组和对象用引用保存起来,后面才能调到相同的地址,每次使用【】都是new Array //因为每次的内存地址不同,所以实际上这是两个键,get方法无法读取一个新键,故返回undefined
- 如何将data中的数据使用map结构
//1、data中定义数据 item: [ ["name","张三"], ["title","里斯"] ] //2、构造函数 let map = new Map(); //3、将item中数据置于map中 item.foreach( ([key,value]) => map.set(key,value) );