Iterator на javascript
Изобрел велосипед: функцию для прохода по итерируемым объектам (массивы, объекты, arguments, nodeCollection). Функция пробегает по каждому элементу первого аргумента, в обработчик передает элемент и индекс. Обработчик вызывается в контексте итерируемого объекта. Результаты вызовов обработчиков складывает в массив или объект (в зависимости от типа входящих данных). По объекту arguments итерирует как по массиву gist.
Пример использования. Все ссылки с решеткой в урле помечаются классом anchor
function iterate(list, func) {
var i, res, type;
type = Object.prototype.toString.call(list);
if ( list.hasOwnProperty('length') || type === '[object HTMLCollection]' ) {
res = [];
for (i = 0; i < list.length; i += 1) {
res.push(func.call(list, list[i], i));
}
} else {
res = {};
for (i in list) {
res[i] = func.call(list, list[i], i);
}
}
return res;
}
Пример использования. Все ссылки с решеткой в урле помечаются классом anchor
iterate(document.links, function (link) {
if (link.href && link.href.indexOf('#') !== -1) {
link.className += ' anchor';
}
})