prototype.js Enumerable each inject

グローバル変数が曲者でした。prototypeを使わずにinjectを記述してみます

<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++);
	});
}

var array = ['hoge', 'moge'];
memo = 'kekka->';
array.each(function(v, k){
	memo = (function(memo, v){
		return memo + v;
	})(memo, v, k)
})
alert(memo);
</script>

prototypeにinjectを記述して書き直してみます

<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.inject = function(memo, iterator){
	this.each(function(v, k){
		memo = iterator(memo, v, k);
	})
	return memo;
}

var array = ['ダークナイト', 'ポニョ', '見に行きたい'];
var iterator = function(memo, v, k){
	if(k == 1) return memo;
	
	return memo + v;
}

var rs = array.inject('明日は', iterator);
alert(rs);
</script>