2016-04-22 11 views
1

Rubyには、Enumerable#cycleというメソッドがあります。このメソッドは、コレクション内でx回繰り返されるループを可能にします。 JavaScriptで何か似たものを探していますが、同等のものが見つかりませんでした。RubyのEnumerable#サイクルに相当するJavaScriptは何ですか?

JavaScriptに相当するRuby's、Enumerable#cycleを知っている人はいますか?

コンテキスト:JavaScriptで同じ配列をループしようとしています。反復が終わりに達すると、反復は配列の先頭から開始し、最終的に停止します。停止部分は難しいことではありません。JavaScriptで達成しようとしている繰り返しのサイクリングです。しかし、私はRubyでこれを行うことができました。

+0

自分自身を実装するのは難しいことではありません。 Rubyにはstdlibが豊富に用意されているので、各メソッドの等価物がJS-landに存在するとは思わないでしょう。ロダシュとアンダースコアでさえそれを持っていないようです。 –

答えて

1

は、私がこれに相当します作り付けのは何もないと思いますが、あなたはあなたに必要がある場合は詳細については、この記事に従うことができます。

Javascript call a function several times with the argumentsを。

Array.prototype.cycle = function (n, callback) { 
    for (var i = 0; i < n; i++) { 
     this.forEach(callback); 
    } 
} 

と、次のようにこれを使用することができます::

別に設けオプションから、あなたも、この方法を有効にするには、Array.prototypeを拡張することができ

a = [1, 2, 3, 4] 
a.cycle(2, function (i) { console.log(i); }); 
// this will print all the values two times 
1

に建てられた何JavaScriptはありませんこれを行うことができます(または私の知識に提案さえ)。しかし、あなた自身を達成することはそれほど難しいことではありません。

あなたが議論していることを想定して、プロトタイプの変更に関する議論を放棄しましょう。あなたが望むものの簡単なバージョンは次のようになります:

Array.prototype.cycle = function(cycleCount, callback) { 
    for(var i = 0; i < cycleCount; i++) { 
    this = this.map(callback); 
    } 
} 

数字の配列があるとします。そして、あなたがやってすることでこれを呼び出すことができます。

myNumberArray.cycle(2, function(num, i) { 
    return num * 2; 
}); 

を私たちも、空想得ることができる、そしてあなたは、各サイクルごとに異なるアクションを指定してみましょう:

Array.prototype.cycle = function(cycleCount, callback) { 
    if(Object.prototype.toString.call(callback) === '[object Array]') { 
    if(callback.length === cycleCount) { 
     for(var i = 0; i < cycleCount; i++) { 
     this = this.map(callback[i]); 
     } 
    } else { 
     // Uhoh, we don't have the right number of callbacks 
     throw new Error('If using multiple callbacks, the umber of callback\'s must match the number of cycles'); 
    } 
    } else { 
    for(var i = 0; i < cycleCount; i++) { 
     this = this.map(callback); 
    } 
    } 
} 

より多くのエラーは、あなたがに実行する必要がありますチェックありそれを頑強にしましょう。しかしあなたはそのアイデアを得ます。 :)

+0

プロトタイプにメソッドを追加する前にチェックを追加すると便利です: 'if(Array.prototypeの 'cycle'){...' – Andy

関連する問題