Map
- 特点:
类似于对象,本质上是键值对的集合
'键'不局限于字符串,各种类型的值都可以当做键
对象'字符串-值',Map'值-值'是一种更完美的Hash结构实现
Map 中的 Key
- key 是字符串
var map = new Map();
var keyString = 'cez';
map.set(keyString, 'String');
console.log(map.get(keyString)); //String
console.log(map.get('cez')); //String
//因为 keyString === 'cez
- key 是对象
var map = new Map();
var keyObj = {};
map.set(keyObj, 'Object');
console.log(map.get(keyObj)); //Object
console.log(map.get({})); //undefined, 因为 keyObj !== {}
- key 是函数
var map = new Map();
var keyFun = function () {};
map.set(keyFun, 'Function');
console.log(map.get(keyFun)); //Function
console.log(map.get(function() {})); //undefined, 因为 keyFun !== function () {}
- key 是NaN
var map = new Map();
map.set(NaN, 'not a number');
console.log(map.get(NaN)); //not a number
var otherNaN = Number('cez');
console.log(map.get(otherNaN)); //not a number
//虽然NaN和任何甚至和自己都不相等,NaN作为Map的键来说是没有区别的。
Map 的迭代
- forEach()
var map = new Map();
map.set(1, 'a');
map.set(2, 'b');
map.set(3, 'c');
map.forEach(function (value, key) {
console.log(key + '=' + value); //1=a; 2=b; 3=c
})
Map 对象的操作
- Map 与 Array 的转换
var keyArray = [[1, 'a'], [2, 'b'], [3, 'c']]; //二维数组
//Map 构造函数可以将一个 二维 键值对数组转换成一个 Map 对象
var map = new Map(keyArray);
console.log(map); //Map(3) {1 => 2, 3 => 4, 5 => 6}
//使用 Array.from 函数可以将一个 Map 对象转换成一个二维键值对数组
var outArray = Array.from(map);
console.log(outArray); //(3) [Array(2), Array(2), Array(2)]
- Map 的克隆
var map = new Map([[1, 'a'], [2, 'b'], [3, 'c']]);
console.log(map); //Map(3) {1 => "a", 2 => "b", 3 => "c"}
var map2 = new Map(map); //克隆
console.log(map2); //Map(3) {1 => "a", 2 => "b", 3 => "c"}
var map3 = map; //赋值
console.log(map3); //Map(3) {1 => "a", 2 => "b", 3 => "c"}
/*注意:使用“=”直接赋值,这样只是复制了old_Map的引用,和old_Map仍使用同一个内存区域。
所以,在修改old_Map的时候,new_Map的值同样会发生变化。*/
map.set(1, 'f');
console.log(map); //Map(3) {1 => "f", 2 => "b", 3 => "c"}
console.log(map2); //Map(3) {1 => "a", 2 => "b", 3 => "c"}
console.log(map3); //Map(3) {1 => "f", 2 => "b", 3 => "c"}
- Map 和合并
var a = new Map([[1, 'a'], [2, 'b'], [3, 'c']]);
var b = new Map([[1, 'd'], [2, 'e']]);
var c = new Map([...a, ...b]);
console.log(c); //Map(3) {1 => "d", 2 => "e", 3 => "c"}
//合并时如果有重复的键值,则后面的会覆盖前面的
Map的属性
- size:与length类似
//创建一个Map
const map = new Map([[1, 'a'], [2, 'b'], [3, 'c']]);
console.log(map); //Map(3) {1 => "a", 2 => "b", 3 => "c"}
//属性:size
console.log(map.size); //3
Map的方法
- set():添加数据
const map = new Map([[1, 'a'], [2, 'b'], [3, 'c']]);
console.log(map); //Map(3) {1 => "a", 2 => "b", 3 => "c"}
map.set(4, 'd');
console.log(map); //Map(4) {1 => "a", 2 => "b", 3 => "c", 4 => "d"}
- get():获取数据
const map = new Map([[1, 'a'], [2, 'b'], [3, 'c']]);
console.log(map); //Map(3) {1 => "a", 2 => "b", 3 => "c"}
console.log(map.get(1)); //a
- delete():删除数据
const map = new Map([[1, 'a'], [2, 'b'], [3, 'c']]);
console.log(map); //Map(3) {1 => "a", 2 => "b", 3 => "c"}
console.log(map.delete(1)); //true(删除成功)
console.log(map); //Map(3) {2 => "b", 3 => "c"}
- has():查询数据
const map = new Map([[1, 'a'], [2, 'b'], [3, 'c']]);
console.log(map); //Map(3) {1 => "a", 2 => "b", 3 => "c"}
console.log(map.has(2)); //true(存在)
console.log(map.has(8)); //false(不存在)
- clear():清空数据
const map = new Map([[1, 'a'], [2, 'b'], [3, 'c']]);
console.log(map); //Map(3) {1 => "a", 2 => "b", 3 => "c"}
map.clear();
console.log(map); //Map(0) {}
- keys():获取所有的'键'
const map = new Map([[1, 'a'], [2, 'b'], [3, 'c']]);
console.log(map); //Map(3) {1 => "a", 2 => "b", 3 => "c"}
console.log(map.keys()); //MapIterator {1, 2, 3}--返回一个迭代器,意味着可以遍历
- values():获取所有的'值'
const map = new Map([[1, 'a'], [2, 'b'], [3, 'c']]);
console.log(map); //Map(3) {1 => "a", 2 => "b", 3 => "c"}
console.log(map.values()); //MapIterator {"a", "b", "c"}
- entries():获取所有的'键-值'
const map = new Map([[1, 'a'], [2, 'b'], [3, 'c']]);
console.log(map); //Map(3) {1 => "a", 2 => "b", 3 => "c"}
console.log(map.entries()); //MapIterator {1 => "a", 2 => "b", 3 => "c"}
1443

被折叠的 条评论
为什么被折叠?



