Javascript 用于快速迭代的jquery范围实用程序(prototype的$R等价物)
在原型机中,对于以下各项而言,这是一个麻烦的问题:Javascript 用于快速迭代的jquery范围实用程序(prototype的$R等价物),javascript,jquery,for-loop,prototypejs,range,Javascript,Jquery,For Loop,Prototypejs,Range,在原型机中,对于以下各项而言,这是一个麻烦的问题: for (i=0; i<10; i++) { ... } JQuery中是否有等效的range?请参阅 jQuery不提供本地范围扩展,但它是一个简单的添加。它只有两个部分。首先,range函数应该返回一个数组,其中范围中的每个项都扩展为一个数组值。接下来,向数组添加一个方法,以迭代传入处理程序函数的每个对象 这里我们定义了forEach,它是ECMA-262标准的一部分,用于迭代数组。有关更多详细信息,请参阅 if (!Array.p
for (i=0; i<10; i++) { ... }
JQuery中是否有等效的range?请参阅
jQuery不提供本地范围扩展,但它是一个简单的添加。它只有两个部分。首先,range函数应该返回一个数组,其中范围中的每个项都扩展为一个数组值。接下来,向数组添加一个方法,以迭代传入处理程序函数的每个对象
这里我们定义了forEach,它是ECMA-262标准的一部分,用于迭代数组。有关更多详细信息,请参阅
if (!Array.prototype.forEach) {
Array.prototype.forEach = function(fun /*, thisp*/) {
var len = this.length >>> 0;
if (typeof fun != "function")
throw new TypeError();
var thisp = arguments[1];
for (var i = 0; i < len; i++) {
if (i in this)
fun.call(thisp, this[i], i, this);
}
};
}
或者将其与自定义步长值(而不是1)一起使用
$.range(2, 20, 4).forEach(function(v) {
console.log(v); // 2, 6, 10, 14, 18
});
我更喜欢一个生成器而不是一个数组-更优雅的imho和更高效的内存
function Range(low, high){
this.low = low;
this.high = high;
}
Range.prototype.__iterator__ = function(){
for (var i = this.low; i <= this.high; i++)
yield i;
};
From:有趣的是,麻烦的第一个示例比第二个示例的字符要少。它也会运行得更快。不可否认,第一个示例的缺点是,如果在当前范围或全局范围内没有变量i,那么将循环变量i放入当前范围或全局范围。在上面的示例中可能没有,因为它专门处理非索引的数字,但在对集合进行迭代时,变量i=0中的所有i;i
$.range(2, 10).forEach(function(v) {
console.log(v); // 2, 3, 4, .., 9
});
$.range(2, 20, 4).forEach(function(v) {
console.log(v); // 2, 6, 10, 14, 18
});
function Range(low, high){
this.low = low;
this.high = high;
}
Range.prototype.__iterator__ = function(){
for (var i = this.low; i <= this.high; i++)
yield i;
};
var range = new Range(3, 5);
for (var i in range)
print(i); // prints 3, then 4, then 5 in sequence