Map和Set
Map和Set
- 
JavaScript的对象有个问题,键key必须是字符串。但实际上Number或者其他数据类型作为键也是非常合理的。 
- 
为了解决这个问题,最新的ES6规范引入了新的数据类型 Map。 //如果用 Array 实现,需要两个 Array //给定一个名字,要查找对应的成绩,就先要在names中找到对应的位置,再从scores取出对应的成绩,Array越长,耗时越长。 var names = ['Michael', 'Bob', 'Tracy']; var scores = [95, 75, 85]; //使用Map var m = new Map([['Michael', 95], ['Bob', 75], ['Tracy', 85]]); console.log(m.get('Michael')); // 95
- 
Map的常用方法var m = new Map(); // 空Map m.set('Adam', 67); // 添加新的key-value m.has('Adam'); // 是否存在key 'Adam': true m.get('Adam'); // 67 m.delete('Adam'); // 删除key 'Adam' m.get('Adam'); // undefined //由于一个key只能对应一个value,所以,多次对一个key放入value,后面的值会把前面的值冲掉 var m = new Map(); m.set('Adam', 67); m.set('Adam', 88); m.get('Adam'); // 88
- 
Set 和 Map 类似,也是一组key的集合,但不存储value。由于key不能重复,在 Set 中,没有重复的key//自动过滤相同的元素 var s = new Set([1, 2, 3, 3, '3']); s; // Set {1, 2, 3, "3"}
- 
Set的常用方法 //通过 add(key) 方法可以添加元素到 Set 中,可以重复添加,但不会有效果 s.add(4); s; // Set {1, 2, 3, 4} s.add(4); s; // 仍然是 Set {1, 2, 3, 4} //通过 delete(key) 方法可以删除元素 var s = new Set([1, 2, 3]); s; // Set {1, 2, 3} s.delete(3); s; // Set {1, 2}
- 
遍历Map 和 Set,无法像数组一样遍历下标 为了统一集合类型,ES6标准引入了新的 iterable 类型,Array,Map,Set 具有 iterable 类型的集合可以通过forEach 循环来遍历 var a = ['A', 'B', 'C']; var s = new Set(['A', 'B', 'C']); var m = new Map([[1, 'x'], [2, 'y'], [3, 'z']]); //以 Array 为例: a.forEach(function (element, index, array) { // element: 指向当前元素的值 // index: 指向当前索引 // array: 指向Array对象本身 console.log(element + ', index = ' + index); }); //Set 没有索引,因此回调函数的前两个参数都是元素本身 var s = new Set(['A', 'B', 'C']); s.forEach(function (element, sameElement, set) { console.log(element); //A B C }); //Map 的回调函数参数依次为 value 、 key 和 map 本身 var m = new Map([[1, 'x'], [2, 'y'], [3, 'z']]); m.forEach(function (value, key, map) { console.log(value); // x y z });
 
                    
                
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号