Map 是一组键值对的结构, 具有极快的查找速度.
举个栗子:
根据名字查找成绩 (名字与成绩顺序一一对应), 此时需要定义 2 个数组:
- var names = [ 'Sam', 'Amy', 'Daming', 'Lingling' ];
- var scores = [ 100, 98, 97, 100 ];
查找 Daming 的成绩, 需要循环第一个数组, 拿到 Daming 的索引 index=3, 接着拿着索引 index=3 去循环对比第二个数组, 当 index=3 与第二个数组的索引相等时, 取值, 值即为 Daming 的成绩.
此时, 只有 4 个学生的姓名与成绩, 数组长度短, 消耗的时长不明显, 而若此时有 10000 个学生, 两个数组的长度就为 10000, 这个时候再去循环对比取值, 那么耗时就会长一些了. 即: 数组越长, 耗时越长.
如果用 Map 实现, 那么只需要一个 "名字"-"成绩" 对照表, 然后直接根据名字查找成绩. 举个栗子:
- var m = new Map([['Sam', 100], ['Amy', 98], ['Daming', 97], ['Lingling', 100]]);
- m.get('Daming'); // 97
初始化 Map 方法有两种:1初始化一个二维数组;2初始化一个空 Map.
- var m = new Map([[],[],[]]); // 初始化一个二维数组
- var n = new Map(); // 初始化一个空 Map
Map 具有以下方法:
- var m = new Map(); // 初始化一个空 Map
- m.set('Sam', 100); // 添加一个新的 key-value
- m.set('Amy', 98);
- m.has('Sam'); // 是否存在 key'Sam', 存在返回 true, 不存在返回 false
- m.get('Sam'); // 100
- m.delete('Sam'); // 删除 key'Sam'
- m.get('Sam') // 删除后, 再获取, 返回 undefined
由于一个 key 对应一个 value, 所以多次对同一个 key 赋值, 会覆盖之前的 value 值.
来源: http://www.jianshu.com/p/18c008b4b35e