Iterator на javascript

Изобрел велосипед: функцию для прохода по итерируемым объектам (массивы, объекты, arguments, nodeCollection). Функция пробегает по каждому элементу первого аргумента, в обработчик передает элемент и индекс. Обработчик вызывается в контексте итерируемого объекта. Результаты вызовов обработчиков складывает в массив или объект (в зависимости от типа входящих данных). По объекту arguments итерирует как по массиву gist.
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';
	}
})
Share
Send
Popular