在Ruby中,有一个名为Enumerable#cycle的方法,它允许在集合中重复循环x次。我在JavaScript中寻找类似的东西,却找不到相同的东西。
有没有人知道相当于Ruby的JavaScript,Enumerable #cycle?
上下文:我试图在JavaScript中循环遍历同一个数组 - 两次。一旦迭代到达终点,我希望迭代从数组的开头开始并最终停止。停止部分并不难 - 它是我尝试在JavaScript中实现的迭代循环。但是,我已经能够在Ruby中使用所述方法执行此操作。
答案 0 :(得分:1)
我认为没有任何内置的内容与此相同,但如果您需要,可以按照这篇文章获取更多详细信息:
Javascript call a function several times with the arguments
除了那里提供的选项外,您还可以扩展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
答案 1 :(得分: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);
}
}
}
你需要做更多的错误检查才能做到这一点,但你明白了。 :)