Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/418.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 用于快速迭代的jquery范围实用程序(prototype的$R等价物)_Javascript_Jquery_For Loop_Prototypejs_Range - Fatal编程技术网

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