2021.11.2:JavaScript(五):iterable
遍历Array可以用下标循环,但是遍历Map与Set就无法使用下标了。为了统一集合类型,ES6标准引入了新的iterable类型,Array、Map和Set都属于Iterable类型。
for...of
具有Iterable类型的集合可以通过for ... of循环来遍历:
var a = ['A', 'B', 'C']; var s = new Set(['A', 'B', 'C']); var m = new Map([[1, 'x'], [2, 'y'], [3, 'z']]); for (var x of a) { // 遍历Array console.log(x); } for (var x of s) { // 遍历Set console.log(x); } for (var x of m) { // 遍历Map console.log(x[0] + '=' + x[1]); }
for...of与for...in的区别在于,for...in遍历的实际上是对象的属性名称,for...of则只循环集合本身的元素。
forEach
更好的遍历方式是直接使用iterable内置的forEach方法,它接收一个函数,每次迭代就自动回调该函数。以Array为例:
var a = ['A','B','C']; a.forEach(function(element , index ,array)){ //element:指向当前元素的值 //index:指向当前索引 //array:指向Array对象本身 console.log(element +',index= '+index); });
结果:
A, index = 0 B, index = 1 C, index = 2
Set与Array类似。但是Set没有索引,因此回调函数的前两个参数都是元素本身:
var s = new Set(['A', 'B', 'C']); s.forEach(function(element,sameElement,set)){ console.log(element); });
Map的回调函数的参数依次为Value、Key、map自身:
var m = new Map([[1, 'x'], [2, 'y'], [3, 'z']]); m.forEach(function(value,key,map)){ console.log(value); });
如果对某些参数不感兴趣,由于JavaScript的函数调用不要求参数必须一致,因此可以忽略它们。例如,只需要获得Array的element:
var a = ['A','B','C']; a.forEach(function(element)){ console.log(element); });

浙公网安备 33010602011771号