一、map的特点

JavaScript 的对象(Object),本质上是键值对的集合(Hash 结构),但是传统上只能用字符串当作键。这给它的使用带来了很大的限制。

为了解决这个问题,ES6 提供了 Map 数据结构。它类似于对象,也是键值对的集合,但是“键”的范围不限于字符串,各种类型的值(包括对象)都可以当作键。也就是说,Object 结构提供了“字符串—值”的对应,Map 结构提供了“值—值”的对应,是一种更完善的 Hash 结构实现。如果你需要“键值对”的数据结构,Map 比 Object 更合适。

let m = new Map();
let myInfo = {name: 'shangyy', age: 18};
console.log(m.set(myInfo,'person')); // Map { { name: 'shangyy', age: 18 } => 'person' }
console.log(m.get(myInfo)); // person
console.log(m.has(myInfo)); // true
console.log(m.size); //
m.delete(myInfo)
console.log(m) // Map {}
let m= new  Map([
['name', 'shangyy' ],
['age', 18],
])
console.log(m) // Map { 'name' => 'shangyy', 'age' => 18 } // 实现原理
let m1 = new Map();
let lists=[
['name', 'shangyy' ],
['age', 18],
];
lists.forEach(([key,value]) => {
m1.set(key,value);
});
console.log(m1); // Map { 'name' => 'shangyy', 'age' => 18 }
let m= new Map();
console.log(m.set(1,'aaa').set(1,'bbb').get(1)); // bbb
console.log(m.set([1],'aaa').get([1])); // undefined
let m = new Map([
[{identity:'master', status: 1}, ()=>{console.log('master-1');}],
[{identity:'master', status: 2}, ()=>{console.log('master-2');}],
[{identity:'gester', status: 1}, ()=>{console.log('gester-1');}],
[{identity:'gester', status: 1}, ()=>{console.log('gester-2');}],
]);
console.log(m);
// Map {
// { identity: 'master', status: 1 } => [Function],
// { identity: 'master', status: 2 } => [Function],
// { identity: 'gester', status: 1 } => [Function],
// { identity: 'gester', status: 1 } => [Function] }
console.log([...m]);
// [ [ { identity: 'master', status: 1 }, [Function] ],
// [ { identity: 'master', status: 2 }, [Function] ],
// [ { identity: 'gester', status: 1 }, [Function] ],
// [ { identity: 'gester', status: 1 }, [Function] ] ]
/*
type: football、basketball
status: 1-开始, 2-进行中 3-结束
*/ const actions=()=>{
return new Map([
['football_1',()=>{console.log('football_1')}],
['football_2',()=>{console.log('football_2')}],
['football_3',()=>{console.log('football_3')}],
['basketball_1',()=>{console.log('basketball_1')}],
['basketball_2',()=>{console.log('basketball_2')}],
['basketball_3',()=>{console.log('basketball_3')}],
]);
}
const onHandleClick=(type, status)=>{
const action = [...actions()].filter(([key,value])=>{
return key === `${type}_${status}`
})
action.forEach(([key,value])=>{
value.call(this);
})
}
onHandleClick('football',2)

六、es6 map的更多相关文章

  1. ES6 & Map & hashMap

    ES6 & Map & hashMap 01 two-sum https://leetcode.com/submissions/detail/141732589/ hashMap ht ...

  2. js es6 map 与 原生对象区别

    区别 object和Map存储的都是键值对组合.但是: object的键的类型是 字符串: map的键的类型是 可以是任意类型: 另外注意,object获取键值使用Object.keys(返回数组): ...

  3. ES6 map与filter

    ES6 map与filter 1.map let arr1 = [1,2,3]; let arr2 = arr1.map((value,key,arr) => { console.log(val ...

  4. ES6 Map to Array

    ES6 Map to Array function differentSymbolsNaive(str) { // write code here. const map = new Map(); co ...

  5. ES6 Map All In One

    ES6 Map All In One Map 字典/地图 Set 集合 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Referenc ...

  6. ES6 Map vs ES5 Object

    ES6 Map vs ES5 Object Map vs Object https://developer.mozilla.org/en-US/docs/Web/JavaScript/Referenc ...

  7. es6 & map & set

    es6 & map & set Map & WeakMap https://developer.mozilla.org/en-US/docs/Web/JavaScript/Re ...

  8. ES6 Map/WeakMap

    最近项目用ES6来写,许多语法都要逐步熟悉呀,今天收藏下Map用法 1.Map构造器 // 字符串作为key, 和JS对象类似 var map = new Map() // set map.set(' ...

  9. JavaScript学习笔记(六)——Map、Set与iterable

    在学习廖雪峰前辈的JavaScript教程中,遇到了一些需要注意的点,因此作为学习笔记列出来,提醒自己注意! 如果大家有需要,欢迎访问前辈的博客https://www.liaoxuefeng.com/ ...

随机推荐

  1. February 11th, 2018 Week 7th Sunday

    Grasp all, lose all. 欲尽得,必尽失. Not to be greedy and not to try to get everything. Our time, energy an ...

  2. C语言入坑指南-被遗忘的初始化

    前言 什么是初始化?为什么要初始化?静态变量和局部变量的初始化又有什么区别?实际应用中应该怎么做?本文将一一回答这些问题. 什么是初始化 初始化指的是对数据对象或者变量赋予初始值.例如: int va ...

  3. 推酷文章中编写js组件系列文章整理

    一步一步实现JS拖拽插件 http://www.tuicool.com/articles/RBbmMjY JS组件系列——基于Bootstrap Ace模板的菜单和Tab页效果分享 http://ww ...

  4. [WeChall] Training: Crypto - Caesar I (Crypto, Training)

    Training: Crypto - Caesar I (Crypto, Training) Crypto - Caesar I As on most challenge sites, there a ...

  5. 《Java大学教程》—第11章 案例研究--第1部分

    自测题:1.    图11-1的UML设计中各个类之间的关系.Hostel与TenantList是关联关系:TenantList和PaymentList与ObjectList是泛化关系.TenantL ...

  6. 【Teradata】数值类型

     1.Decimal(n,m) 十进位小数 n为最大数值位数(取值1-38),m为小数位数(取值0-n). decimal(3,2)    -9.99 to 9.99 decimal(4,4)   - ...

  7. TCP连接与断开详解(socket通信)

    http://blog.csdn.net/Ctrl_qun/article/details/52518479 一.TCP数据报结构以及三次握手 TCP(Transmission Control Pro ...

  8. C#事件の事件聚合器

    事件聚合器用于集中管理事件的订阅(Subscribe)和处理(Handle),要使用事件聚合器,首先要理解:事件(event)本质上是一个类. 传统的+=和-=不足: 1.管理很麻烦:2.不方便扩展. ...

  9. Python中的__new__()方法与实例化

    @Python中的__new__()方法与实例化   __new__()是在新式类中新出现的方法,它作用在构造方法建造实例之前,可以这么理解,在Python 中 存在于类里面的构造方法__init__ ...

  10. P1563 玩具谜题(简单模拟)

    就是一个简单模拟 #include<iostream> #include<string> using namespace std; ; int in[maxn], x[maxn ...