에 대한 성가신은 :JQuery와 범위 유틸리티는 프로토 타입에서
for (i=0; i<10; i++) { ... }
는
$R(0, 10).each(function(i){ ... });
JQuery와의 범위를 동등한이 있습니까
과 같이 쓸 수있다?에 대한 성가신은 :JQuery와 범위 유틸리티는 프로토 타입에서
for (i=0; i<10; i++) { ... }
는
$R(0, 10).each(function(i){ ... });
JQuery와의 범위를 동등한이 있습니까
과 같이 쓸 수있다?는 http://code.google.com/p/jquery-utils/source/browse/trunk/src/jquery.arrayUtils.js?r=452
jQuery를 기본적 범위 확장을 제공하지 않습니다 볼 수 있지만, 그것은 쉽게 추가합니다. 거기에는 두 부분 만 있습니다. 먼저 범위 함수는 범위의 각 항목이 배열 값으로 확장 된 배열을 반환해야합니다. 그런 다음 Array
에 메서드를 추가하여 처리기 함수에서 전달되는 각 객체를 반복합니다.
여기서 우리는 배열을 반복하기 위해 ECMA-262 표준의 일부인 forEach
을 정의합니다. 자세한 내용은 MDC을 참조하십시오.
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);
}
};
}
다음으로 범위를 jQuery 네임 스페이스 내의 배열로 확장하는 함수가 필요합니다. 위의 URL에서 촬영 (원본 소스 - http://blog.outofhanwell.com/2006/03/29/javascript-range-function/) :
$.range(2, 10).forEach(function(v) {
console.log(v); // 2, 3, 4, .., 9
});
또는 대신 1
$.range(2, 20, 4).forEach(function(v) {
console.log(v); // 2, 6, 10, 14, 18
});
의 사용자 정의 단계 값을 사용
$.extend({
// Returns a range object
// Author: Matthias Miller
// Site: http://blog.outofhanwell.com/2006/03/29/javascript-range-function/
range: function() {
if (!arguments.length) { return []; }
var min, max, step;
if (arguments.length == 1) {
min = 0;
max = arguments[0]-1;
step = 1;
}
else {
// default step to 1 if it's zero or undefined
min = arguments[0];
max = arguments[1]-1;
step = arguments[2] || 1;
}
// convert negative steps to positive and reverse min/max
if (step < 0 && min >= max) {
step *= -1;
var tmp = min;
min = max;
max = tmp;
min += ((max-min) % step);
}
var a = [];
for (var i = min; i <= max; i += step) { a.push(i); }
return a;
}
});
Alrighty, 지금 우리가 할 수있는
나는 배열에 발전기를 선호한다 - 더 우아하고 (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;
};
그런 다음 수 단순히
var range = new Range(3, 5);
for (var i in range)
print(i); // prints 3, then 4, then 5 in sequence
에서 : "성가신"첫 번째 예는 두 번째 예보다 적은 문자가 얼마나 https://developer.mozilla.org/en/Core_JavaScript_1.5_Guide/Iterators_and_Generators
흥미 롭. 또한 더 빨리 실행됩니다. –
첫 번째 예제는 루프 변수 'i'를 현재 스코프 (또는이 스코프의 다른 곳에'var i '가 없을 경우 전역 스코프)에 넣는 단점이 있습니다. –
인덱스가 아닌 숫자를 다루고 있기 때문에 위의 예제가 아닐 수도 있지만 콜렉션을 반복 할 때 'var i = 0; i
Anurag