ES6 Map

Map


  • 特点:
  1. 类似于对象,本质上是键值对的集合

  2. '键'不局限于字符串,各种类型的值都可以当做键

  3. 对象'字符串-值',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"}

 

 

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值