prototype.js Enumerable _each each collect map eachSlice

eachSliceをprototype.jsなしの最小構成で実装

  • eachSliceメソッド内の「this.toArray()」はthis.collect()になる。引数にイテレータが無い場合はPrototype.Kが代入される。引数をそのまま返す関数です
<script>
Array.prototype._each = function(iterator){
	for(var i=0, l=this.length; i<l; i++){
		iterator(this[i]);
	}
}
Array.prototype.each = function(iterator){
	var index = 0;
	this._each(function(value){
		iterator(value, index++);
	});
}

Array.prototype.collect = function(iterator){
	iterator = iterator || function(x){return x};
	var rs = [];
	this.each(function(v, k){
		rs.push(iterator(v, k));
	});
	return rs;
}

Array.prototype.eachSlice = function(number, iterator){
	var index = -number;
	var slices = [];
	var array = this.collect();
	while((index += number) < array.length){
		slices.push(array.slice(index, index + number));
	}
	return slices.collect(iterator);
}

var array = ['hoge', 'bar', 'moge', 'uho'];
var rs = array.eachSlice(3, function(v, k){
	return v;
});
console.log(rs);
</script>