javascript で配列 [0..9] を作りたいときどうしてますか?
ふつう
var a = new Array(10); for (var i=0; i < 10; i++) {a[i] = i;};
ふつう
var a = []; for (var i=0; i < 10; i++) {a.push(i);};
prototype.js を使う
var a = new Array(10); a.length.times(function (i) {a[i] = i});
var a = $A($R(0,9));
New in JavaScript 1.7 - MDCでは内包表記が使える。
function range(begin, end) { for (let i = begin; i < end; ++i) { yield i; } }; var a = [i for (i in range(0, 10))];
私は、prototype.js 1.5 時代に
var a = new Array(10); a.each(function(x,i) {a[i] = i});
とやっていたことがあって、そのときは動いてましたが、prototype.js 1.6では、 each がネイティブの forEach を(あるときは)使うように変更されたので、動かなくなりました。forEach は未定義のマスは飛ばしてしまうからです。
同様に、
var a = new Array(10); a = a.map(function(x,i) {return i});
もだめになりました。
それはともかく、prototype.jsにrange関数を入れておいてほしいです。SchemeならSRFI-1のiotaがあるし、OCamlならArray.initがあるし、かなり基本的な関数だと思うのですが。 iota ならこう。
Array.prototype.iota = function(len,start,step) { var s = start ? start : 0; var t = step ? step : 1; var a = new Array(len); for (var i = 0; i < len; i++) a[i] = s + (i * t); return a; }