Простой итератор для javascript массива

Пришло время, когда надоело писать конструкции вида for( var i=0;i<element .items.length; i++ ){ … } настолько, что задумался насчет итераторов, слегка упрощающих жизнь.
Статьи по этой теме попадались скудные, поэтому решил написать свое решение.
Код итератора:

window.each = function( /*arr*/ ){
	for( var i=0;i<arguments.length; i++ ){
		if( arguments[i].each ){  arguments[i].ikey = arguments[i].iterator = 0;  }
	}
}
window.loop = function( /*arr*/ ){
	var res = true;
	for( var i=0;i<arguments.length; i++ ){
		if( arguments[i].loop ){  res = res & arguments[i].loop();  }
	}
	return res;
}
Array.prototype.each = function(){  this.ikey = this.iterator = 0;  }
Array.prototype.loop = function(){
	if( typeof(this.ikey) == 'undefined' ){  this.ikey = this.iterator = 0;  }
	if( this.iterator < this.length ){
		this.ikey = this.iterator;
		this.ival = this[ this.iterator++ ]; // item's key (ikey) & item's value (ivalue)
		return true;
	}
	this.ikey = this.iterator = 0;
	return false;
}

Array.prototype.isArray = true;
function isArray( variable ){
	return (variable.isArray) ? true : false;
}

Пример использования:

var abc = [ 1, 2, 3, 4, 5, 6, 7 ];
for(each(abc);loop(abc);){
	console.log( abc.ikey, abc.ival );
}
var def = [ 'a', 'b', 'c', 'd', 'e', 'f', 'g' ];
for(def.each();def.loop();){
	console.log( def.ikey, def.ival );
}

Можно вообще не использовать each(), он нужен только для сброса позиции итератора. То есть, если из цикла нет выхода по break, то позиция сбрасывается автоматом в конце цикла:

var def = [ 'a', 'b', 'c', 'd', 'e', 'f', 'g' ];
for(;def.loop();){
	console.log( def.ikey, def.ival );
}

Кроме того, используя функции each и loop, можно одновременно пролистать несколько массивов. Но нужно иметь в виду, что количество итераций будет равно количеству элементов в самом меньшем массиве.

var arr1 = [ 'a', 'b', 'c', 'd', 'e', 'f', 'g' ];
var arr2 = [ 1, 2, 3, 4, 5 ];
for(each(arr1,arr2);loop(arr1,arr2);){
	console.log( arr2.ival, arr1.ival );
}
This entry was posted in Javascript. Bookmark the permalink.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Можно использовать язык разметки Markdown

Protected by WP Anti Spam