Обновление до tomcat 7.0.70 разрешило проблему для меня
Я начал использовать итераторы, где релевантный. Производительность разумна, однако что еще более важно, она позволяет Вам инкапсулировать логику цикличного выполнения:
function createIterator(x) {
var i = 0;
return function(){
return x[i++];
};
}
Затем для использования:
var iterator=createIterator(['a','b','c','d','e','f','g']);
iterator();
возвраты "a";
iterator();
возвраты "b";
и так далее.
, Чтобы выполнить итерации целого списка и отобразить каждый объект:
var current; while(current=iterator()) { console.log(current); }
знать, что вышеупомянутое только приемлемо для итерации списка, который содержит значения "non-falsy". Если этот массив содержал какой-либо из:
предыдущий цикл остановил бы в том объекте, не всегда, что Вы хотите/ожидаете.
Для предотвращения этого использования:
var current;
while((current=iterator())!==undefined)
{
console.log(current);
}
Просто сохраните длину в переменной сначала.
var len = a.length;
for (var i = 0; i < len; i++) {
var element = a[i];
}
Я знаю, что опаздываю стороне, но я использую обратные циклы для циклов, которые не зависят от порядка.
Очень похожий на @Mr. Ондатра - но упрощение теста:
var i = a.length, element = null;
while (i--) {
element = a[i];
}
Вы могли просто всегда использовать некоторое время цикл и вычислять предел массива перед рукой.
Var max = a.length-1;
var i = 0;
while(i <= max)
{
var element = a[i];
i++;
}
Я не использую его сам, но один из моих коллег использует этот стиль:
var myArray = [1,2,3,4];
for (var i = 0, item; item = myArray[i]; ++i) {
alert(item);
}
как ответ Ash, это поразит проблемы, если у Вас будут значения "falsey" в Вашем массиве. Избегать, чтобы проблема изменила его на (item = myArray[i]) != undefined
scope
параметр как The value of the scope parameter is expressed as a list of space-delimited, case-sensitive strings
.
– davidjb
11 September 2017 в 04:51
Если у Вас есть много элементов в массиве, и скорость является проблемой тогда, Вы хотите использовать некоторое время цикл, который выполняет итерации от самого высокого до самого низкого.
var i = a.length;
while( --i >= 0 ) {
var element = a[i];
// do stuff with element
}
value="https://www.googleapis.com/auth/calendar email"
– user3479125
17 August 2017 в 11:09
Маленькое улучшение оригинала, чтобы только вычислить размер массива однажды:
for(var i = 0, len = a.length; i < len; i++){ var element = a[i]; }
кроме того, я вижу много из для.. в циклах. Хотя имеют в виду, что это не является технически кошерным, и вызовет проблемы с Прототипом конкретно:
for (i in a) { var element = a[i]; }
Я не вижу что проблема с использованием стандарта для (;;) цикл. Немного теста
var x;
var a = [];
// filling array
var t0 = new Date().getTime();
for( var i = 0; i < 100000; i++ ) {
a[i] = Math.floor( Math.random()*100000 );
}
// normal loop
var t1 = new Date().getTime();
for( var i = 0; i < 100000; i++ ) {
x = a[i];
}
// using length
var t2 = new Date().getTime();
for( var i = 0; i < a.length; i++ ) {
x = a[i];
}
// storing length (pollution - we now have a global l as well as an i )
var t3 = new Date().getTime();
for( var i = 0, l = a.length; i < l; i++ ) {
x = a[i];
}
// for in
var t4 = new Date().getTime();
for( var i in a ) {
x = a[i];
}
// checked for in
var t5 = new Date().getTime();
for( var i in a ) {
if (a.hasOwnProperty(i)) {
x = a[i];
}
}
var t6 = new Date().getTime();
var msg = 'filling array: '+(t1-t0)+'ms\n'+
'normal loop: '+(t2-t1)+'ms\n'+
'using length: '+(t3-t2)+'ms\n'+
'storing length: '+(t4-t3)+'ms\n'+
'for in: '+(t5-t4)+'ms\n'+
'checked for in: '+(t6-t5)+'ms';
console.log( msg );
результаты в:
filling array: 227ms
normal loop: 21ms
using length: 26ms
storing length: 24ms
for in: 154ms
checked for in: 176ms
Так:-для взятия in самое длинное, с помощью свойства длины (то, которое является свойством и не должно быть вычислено), почти с такой скоростью, как хранит его сначала - который является только контактным усиком медленнее, чем использование целого числа.
И для () обычный способ циклично выполниться по массиву, который все ожидают и понимают.
Все они добавляют переменную к объему, который они выполняют в - я - который является общим названием для этого использования и так не должен использоваться для других вещей. Хранение длины сначала добавляет другой var - l - к объему, который является ненужный
WHERE
пункт TRUE или FALSE. Это часто используется в запросах sub.
– mrt
24 November 2015 в 09:19
Так, сначала Вы определяете идеальный цикл JavaScript, я полагаю, что он должен быть похожим на это:
ary.each (функция () {$arguments [0]) .remove ();})
Это может потребовать prototype.js библиотеки.
Затем, Вы получаете disgustet с аргументами [0] часть и имеете код быть произведенными автоматически из Вашей серверной инфраструктуры. Это работает, только если лестничная структура является Побережьем.
Теперь, Вам генерировали вышеупомянутое:
ary делают: [: каждый | каждый элемент удаляет].
Это прилагается завершение синтаксиса и переводит точно в вышеупомянутый JavaScript. И это заставит голову кружиться людей, которые не использовали интеграцию прототипа побережий прежде, поскольку они читают Ваш код. Это уверенный заставляет Вас чувствовать себя спокойными, также. Не говоря уже об усилении в гиковатости можно добраться здесь. Девочки любят его!
Environment.NewLine
. – Pondidum 31 October 2012 в 10:13