Перебор массива. Реализация логики CSS3-селекторов. Технологии будущего. Оптимизация структуры веб-страниц
Примеры вызовов
Еще один велосипед
Выборка CSS-селекторов
От простого к сложному
Перебор массива
Уникальность элементов
Подводя черту
Пусть у нас объявлен некоторый массив a, с элементами которого мы совершаем какие-либо действия. Нам нужно перебрать все элементы строго по возрастанию (порядок важен), т.е. просто while(i--) мы использовать не можем. Наиболее распространенным сейчас способом будет обычный for:
for (var j=0, item = a[j]; item; item = a[j++]) {
item++;
}
Естественно, он на 30–40% медленнее следующего while:
var j = 0,
item,
len = a.length;
while (j < len) {
item = a[j++];
item++;
}
Однако если нам нужно выполнить какие-либо действия с элементом массива, то без кэширования его в локальную переменную никак не обойтись. В этом случае следующий вариант с while (через проверку существования элементов при инкременте) будет еще быстрее на 5–10%:
var j = 0,
item;
while (item = a[j++]) {
item++;
}
Очевидно, что для всех трех циклов в YASS (http://yass.webo.in/) используется именно он.
Если же нам абсолютно не важен порядок элементов (например, просто нужно найти нужный или вернуть false), то логично будет воспользоваться обратным while:
while (idx--) {
sets[idx].yeasss = null;
}
Именно такой код используется для сброса у элемента флага, отмечающего состояние «выбран». Давайте рассмотрим, зачем этот флаг нужен, и зачем его сбрасывать.