1

一種の「円形配列」が必要です。単一のインスタンスを除いて、すべてが機能しています。「インスタンス化可能」にする方法がわかりません。私はそれが次のように動作することを意味します:

var arr = ['a', 'b', 'c', 'd']; // it's kind of pseudo-code 
arr.getNext(); // gives a
arr.getNext(); // gives b
arr.getNext(); // gives c
arr.getNext(); // gives d
arr.getNext(); // gives a
arr.getNext(); // gives b
// and so on

内部で配列を使用してオブジェクトを作成し、それを反復処理できることはわかっていますが、これを別の方法で実行できると確信しています。

問題は、そのオブジェクトの複数のインスタンスが必要なことです。それが私ができる唯一のインスタンスである場合:

var arr = ['a', 'b', 'c', 'd'];
arr.getNext = function() {
  // ... I got this stuff working
}

このようなカスタム配列の複数のインスタンスを作成できるようにするにはどうすればよいですか?

4

3 に答える 3

4

Array.prototype(列挙不可能なプロパティを作成するために)拡張できる場合でもObject.defineProperty、実際のニーズによっては、代替ソリューションも興味深い場合があります。

配列に対して反復子を返す関数を定義できます。

function iter(arr) {
    var index = -1;

    return {
        next: function() {
            index = (index + 1) % arr.length;
            return arr[index];
        }
    };
}

使用法:

var it = iter(arr);
it.next();
于 2013-07-04T10:55:27.407 に答える
1

を拡張しprototypeて、 のすべてのインスタンスで使用できるようにすることができますArray

Array.prototype.getNext = function(){
  var next = this.shift();
  this.push(next);
  return next;
};

これにより配列が変更されることに注意してください。

于 2013-07-04T10:52:53.077 に答える
0

次のように、getNext メソッドを Array プロトタイプに追加できます。

Array.prototype.getNext = function ()
{
....
}

その後、作成した任意の配列でこのメソッドを呼び出すことができます。

于 2013-07-04T10:52:10.343 に答える