遍历Array可以采用下标循环,遍历Map和Set就无法使用下标。为了统一集合类型,ES6标准引入了新的iterable类型,Array、Map和Set都属于iterable类型。具有iterable类型的集合可以通过新的for ... of循环来遍历。
var s = new Set([1,2,2,3,4,5,6,6,6]);
for (var x of s) {
console.log(x);
}
var mm = new Map([[1, 'x'], [2, 'y'], [3, 'z']]);
for (var x of mm) { // 遍历Map
console.log(x[0] + '=' + x[1]);
}
-
for...of 与 for...in的区别:
for ... in循环由于历史遗留问题,它遍历的实际上是对象的属性名称。一个Array数组实际上也是一个对象,它的每个元素的索引被视为一个属性。 -
forEach方法:它接收一个函数,每次迭代就自动回调该函数,以数组为例:
var arr = ['A','B','C','D'];
//参数t:表示当前元素的值;numer:对应下标;ts:对应数组(就是arr)
arr.forEach(function (t, number, ts) {
console.log(t,number,ts);
})
输出:
A 0 [ 'A', 'B', 'C', 'D' ]
B 1 [ 'A', 'B', 'C', 'D' ]
C 2 [ 'A', 'B', 'C', 'D' ]
D 3 [ 'A', 'B', 'C', 'D' ]
回调函数参数也可以只写某一个:
// 参数t表示当前元素值
arr.forEach(function (t) {
console.log(t);
})
//参数t:表示当前元素的值;numer:对应下标
arr.forEach(function (t, number) {
console.log(t,number);
})
- map对应forEach
var map = new Map([[1,'x'],[0,'y'],[2,'z']]);
//Map的回调函数参数依次为value、key和map本身:
map.forEach(function (t) {
console.log(t);
})
//
map.forEach(function (t, number, ts) {
console.log(t,number,ts);
})
map.forEach(function (t, number) {
console.log(t,number);
})
输出:
x
y
z
x 1 Map { 1 => 'x', 0 => 'y', 2 => 'z' }
y 0 Map { 1 => 'x', 0 => 'y', 2 => 'z' }
z 2 Map { 1 => 'x', 0 => 'y', 2 => 'z' }
x 1
y 0
z 2
- set对应forEach
var set = new Set(['x',1,3,4,55,44,3]);
set.forEach(function (t, number, ts) {
console.log(t,number,ts);
})
输出:
x x Set { 'x', 1, 3, 4, 55, 44 }
1 1 Set { 'x', 1, 3, 4, 55, 44 }
3 3 Set { 'x', 1, 3, 4, 55, 44 }
4 4 Set { 'x', 1, 3, 4, 55, 44 }
55 55 Set { 'x', 1, 3, 4, 55, 44 }
44 44 Set { 'x', 1, 3, 4, 55, 44 }
网友评论