Array.fill()

Ruby のやつ。合ってるのか分からん。

by ethertank

HTML

<a href="http://www.ruby-lang.org/ja/old-man/html/Array.html#fill" title="#fill : Array - Rubyリファレンスマニュアル">#fill : Array - Rubyリファレンスマニュアル</a>

JavaScript

Array.prototype.fill || (Array.prototype.fill = function() {
    if (arguments.length === 0) return this;

    for (var res = this.slice(), i = arguments[1] || 0, l = (arguments[2] + arguments[1] || this.length - arguments[1] + 1) || this.length; i < l; ++i) {
        res[i] = arguments[0];
    }
    return res;
});







/*Array.prototype.fill || (Array.prototype.fill = function() {
    if (arguments.length === 0) return this;

    var res = this.slice(),
        i = arguments[1] || 0,
        l = (arguments[2] + arguments[1] || this.length - arguments[1] + 1 ) || this.length;

    for (; i < l; ++i) {
        res[i] = arguments[0];
    }
    return res;
});*/







/* syntax *//*

  [Array].fill(val [, start[, length]]);

        val : セットする値
      start : 配列のどの位置から値を書き換えるか
     length : start の位置からからいくつ書き換えるか
*/


/* Ruby の fill *//*
 "配列の、指定された範囲すべてに val をセットします。"
 "二番目の 形式で length が省略された時は配列の終りまでの長さを意味します。"
 "指定された部分配列が元の配列の範囲を越える時は長さを自動的に拡張し、拡張した部分を val で初期化します。"
 -- http://www.ruby-lang.org/ja/old-man/html/Array.html#fill
*/


/* memo *//*
・Ruby v1.6の仕様に基づいて実装。1.7、1.8 だと…シンタックスどうすっかなコレ…って感じ。
 第四引数をブーリアンにして、第一引数に指定した関数をそのまま突っ込むか評価用とするかを切り替える…とか?

・作ってはみたけど、どういう時に使うのか、適切な用途がさっぱり分からん。
 分からんとダメよね(- ∀ - )
*/



/* test */
console.log("-----------------------------");

var a;

a = [].fill();
console.log(typeof a + "," + (a instanceof Array) + "," + a.length);
// object, true, 0

a = [1, 2, 3, 4].fill("x");
console.log(a + ", " + typeof a + ", " + (a instanceof Array) + ", " + a.length);
// x,x,x,x, object, true, 4

a = [1, 2, 3, 4].fill("x", 1);
console.log(a + ", " + typeof a + ", " + (a instanceof Array) + ", " + a.length);
// 1,x,x,x, object, true, 4

a = [1, 2, 3, 4].fill("x", 0, 4);
console.log(a + ", " + typeof a + ", " + (a instanceof Array) + ", " + a.length);
// x,x,x,x, object, true, 4

a = [1, 2, 3, 4].fill("x", 1, 4);
console.log(a + ", " + typeof a + ", " + (a instanceof Array) + ", " + a.length);
// 1,x,x,x,x, object, true, 5

a = [[1, 2], [5,...