素人がプログラミングを勉強していたブログ

プログラミング、セキュリティ、英語、Webなどのブログ since 2008

連絡先: すかいぷ:javascripter_  か javascripter あっと tsukkun.net skypeのほうがいいです

Arrayを拡張(flatten,max,min,sum,uniq,first,last)

Array.prototype.max=function()Math.max.apply(null,this);
Array.prototype.min=function()Math.min.apply(null,this);
Array.prototype.sum=function()this.reduce(function(a,b)a+b,0);
Array.prototype.uniq=function()this.sort().reduceRight(function(a,b)(a[0]===b||a.unshift(b),a),[]);
Array.prototype.last=function()this[this.length-1];
Array.prototype.first=function()this[0];
Array.prototype.flatten=function()this.reduce(function(a,b)a.concat((b instanceof Array)?b.flatten():b),[]);

というコードを先頭に入れれば、

[1,2,3].max();//3
[1,2,3].min();//1
[1,2,3,4,5].sum();//15
[1,2,2,1,3,3].uniq();//[1,2,3]
[1,2,3].first();//1
[1,2,3].last();//3
[1,2,[3,4,[5,6]]].flatten();//[1,2,3,4,5,6]

といったことができるようになって非常に便利。

小奇麗にしたコードも置いておく。

Array.prototype.max=function(){
	return Math.max.apply(null,this);
}

Array.prototype.min=function(){
	return Math.min.apply(null,this);
}

Array.prototype.sum=function(){
	return this.reduce(
			function(a,b){
			return a+b;
			}
			,0);
}

Array.prototype.uniq=function(){
	return this.sort().reduceRight(
			function(a,b){
			if(a[0]===b){
			}else{
			a.unshift(b);
			}
			return a;
			}
			,[]);
}

Array.prototype.first=function(){
	return this[0];
}

Array.prototype.last=function(){
	return this[this.length-1];
}

Array.prototype.flatten=function(){
	return this.reduce(
			function(a,b){
			if(b instanceof Array){
			return a.concat(b.flatten());
			}else{
			return a.concat(b);
			}
			}
			,[]);
}