1. 程式人生 > >javascript語言擴充套件:可迭代物件(4)

javascript語言擴充套件:可迭代物件(4)

js 1.7中還包含一個數組推導(array comprehension)的特性,如果不在最後介紹它好像顯得不怎麼完整。
陣列推導其實很簡單:

let a = [x*x for(x in range(0,10)) if(x%2===0)];

以上程式碼中的range()返回一個生成器物件。上述程式碼等價於:

let a = [];
for(x in range(0,10)){
    if(x%2 === 0)
        a.push(x*x);
}

在js 1.8中,將陣列推導中的方括號變為圓括號,就變成一個生成器表示式。該表示式的返回值是一個生成器物件,而不是陣列。可陣列推導相比,使用生成器表示式的好處是可以惰性求值(lazy evaluation),這種特性可以應用於潛在的無窮序列。不過使用生成器表示式不像陣列可以隨機存取,生成器沒有索引,為了得到第n個值,必須遍歷之前的n-1個值。

var a = [0,1,2,3,4,5,6,7,8,9,10];
var c = (x for(x in a) if(x%2 == 0));
for(i in c)
  console.log(i);