Я начал использовать итераторы, где это уместно. Производительность является разумной, но, что более важно, она позволяет инкапсулировать циклическую логику:
function createIterator(x) {
var i = 0;
return function(){
return x[i++];
};
}
Затем использовать:
var iterator=createIterator(['a','b','c','d','e','f','g']);
iterator();
возвращает «а»;
iterator();
возвращает "b";
и т. Д.
Для просмотра всего списка и отображения каждого элемента:
var current;
while(current=iterator())
{
console.log(current);
}
Имейте в виду, что вышеприведенное допустимо только для итерации списка, который содержит «не ложные» значения. Если этот массив содержал любое из:
- 0
- ложь
- ""
- 1026 * нуль *
- NaN
предыдущий цикл остановился бы на этом элементе, а не всегда на том, что вы хотите / ожидаете.
Чтобы избежать этого, используйте:
var current;
while((current=iterator())!==undefined)
{
console.log(current);
}