![](/img/trans.png)
[英]Equivalent of Ruby Enumerable#each_slice in Javascript?
[英]What is the JavaScript equivalent to Ruby's Enumerable#cycle?
在Ruby中,有一個稱為Enumerable#cycle的方法,該方法允許在集合中執行x次重復循環。 我正在尋找JavaScript中類似的東西,但找不到等效的東西。
有誰知道與Ruby的Enumerable#cycle等效的JavaScript?
上下文:我試圖遍歷JavaScript中的同一數組-兩次。 一旦迭代結束,我希望迭代從數組的開頭開始並最終停止。 停止的部分並不難-這是我試圖在JavaScript中實現的迭代循環。 但是,通過上述方法,我已經能夠在Ruby中做到這一點。
我認為沒有任何內置功能可與之等效,但是如果您需要,可以關注此帖子以獲取更多詳細信息:
除了那里提供的選項之外,您還可以擴展Array.prototype
以啟用此方法:
Array.prototype.cycle = function (n, callback) {
for (var i = 0; i < n; i++) {
this.forEach(callback);
}
}
並且可以像下面這樣使用:
a = [1, 2, 3, 4]
a.cycle(2, function (i) { console.log(i); });
// this will print all the values two times
沒有內置的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);
}
}
}
您需要做更多的錯誤檢查才能使其變得強大,但是您明白了。 :)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.