2021.11.2:JavaScript(五):iterable

遍历Array可以用下标循环,但是遍历Map与Set就无法使用下标了。为了统一集合类型,ES6标准引入了新的iterable类型,Array、MapSet都属于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...offor...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);
});

 

posted @ 2021-11-02 22:14  ShineLe  阅读(24)  评论(0)    收藏  举报