簡體   English   中英

JavaScript與Ruby的Enumerable#cycle等效嗎?

[英]What is the JavaScript equivalent to Ruby's Enumerable#cycle?

在Ruby中,有一個稱為Enumerable#cycle的方法,該方法允許在集合中執行x次重復循環。 我正在尋找JavaScript中類似的東西,但找不到等效的東西。

有誰知道與Ruby的Enumerable#cycle等效的JavaScript?

上下文:我試圖遍歷JavaScript中的同一數組-兩次。 一旦迭代結束,我希望迭代從數組的開頭開始並最終停止。 停止的部分並不難-這是我試圖在JavaScript中實現的迭代循環。 但是,通過上述方法,我已經能夠在Ruby中做到這一點。

我認為沒有任何內置功能可與之等效,但是如果您需要,可以關注此帖子以獲取更多詳細信息:

Javascript用參數多次調用一個函數

除了那里提供的選項之外,您還可以擴展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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM