沒有內置的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);
}
}
}
還有更多的錯誤檢查,你需要做的讓這個強大,但你明白了。 :)
實現你自己並不難。 Ruby有非常豐富的stdlib,所以我不希望每種方法的等價物都存在於JS-land中。即使lodash和下劃線似乎也沒有。 –