Set 和 Map 结构也原生具有 Iterator 接口,可以直接使用for...of循环
- Map
Map是一组键值对的结构,具有极快的查找速度
与Map有关的方法的使用
var m = new Map(); // 空Map
m.set('Adam', 67); // 添加新的key-value
m.set('Bob', 59);
//遍历一下
for (let pair of map) {
console.log(pair);
}//输出
//[''Adam',67]
//['Bob',59]
//遍历一下
for (var [name, value] of m) {
console.log(name + ": " + value);
}
//输出
//Adam:67
//Bob:59
m.has('Adam'); // 是否存在key 'Adam': true
m.get('Adam'); // 67
m.delete('Adam'); // 删除key 'Adam'
m.get('Adam'); // undefined
- Set
可以这样理解,Set可以实现去重,其键名即键值
Set和Map类似,也是一组key的集合,但不存储value。由于key不能重复,所以,在Set中,没有重复的key。
Set和相关方法处理后,比如添加或者删除去重返回的结果都是一个对象
var s1 = new Set(); // 空Set
var s2 = new Set([1, 2, 3]); // 含1, 2, 3
var s = new Set([1, 2, 3, 3, '3']);
s; // Set {1, 2, 3, "3"}
**返回的是一个对象!**
与Set有关的方法
//添加一个元素
var s = new Set([1, 2, 3]);
for (var e of s) {
console.log(e);
}
//输出 1 2 3
s.add(4);
s; // Set {1, 2, 3, 4}
//删除一个元素
var s = new Set([1, 2, 3]);
s; // Set {1, 2, 3}
s.delete(3);
s; // Set {1, 2}
总结:1、Set 结构遍历时,返回的是一个值,而 Map 结构遍历时,返回的是一个数组,该数组的两个成员分别为当前 Map 成员的键名和键值。 2、遍历的顺序是按照各个成员被添加进数据结构的顺序
补充
ES6 的数组、Set、Map 都部署了以下三个方法,调用后都返回遍历器对象。
entries() 返回一个遍历器对象,用来遍历[键名, 键值]组成的数组。对于数组,键名就是索引值;对于 Set,键名与键值相同。Map
结构的 Iterator 接口,默认就是调用entries方法。 keys() 返回一个遍历器对象,用来遍历所有的键名。 values()
返回一个遍历器对象,用来遍历所有的键值。
let arr = [‘a’, ‘b’, ‘c’];
for (let pair of arr.entries()) {
console.log(pair);
}
// [0, ‘a’]
// [1, ‘b’]
// [2, ‘c’]