私より効率的な方法を求めます.

2079 ワード


<script>
/*
    :http://www.iteye.com/topic/204049
    :             
    :
		        String[]     .
	  :
		String[24]  8 ,   String[8],String[8],String[8]     .
		   String[32]  10 ,    String[10],String[10],String[10],String[2].
	          ? 

    ,       :
*/
function subArray(arr, spl){
	
	var newarr = [];
	var arrlen = arr.length;
	
	if(arrlen < spl)
		return ["Error array length."];
	
	//        
	var result = arrlen % spl == 0 ? arrlen / spl : Math.floor(arrlen / spl) + 1;
	
	for(var i=0; i<result; i++){
		/*
		  :
			1: 0~(spl-1)
			2: (spl)~(2*spl-1)
			3: (2*spl)~(3*spl-1)
		*/
		var temparr = [];
		for(var j=0; j<spl; j++){
			var curr = i*spl+j;
			if(curr<arrlen)
				temparr.push(arr[curr]);
		}
		newarr.push(temparr);
	}
	
	return newarr;
}

var arr = ['a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z',0,1,2,3,4,5,6,7,8,9];
var spl = 8;
//alert("Array length: "+ arr.length);

var oldtime = new Date;

var newarr = subArray(arr, spl);

document.writeln("Run time: " + (new Date - oldtime) + "ms<hr>");
for(var i=0;i<newarr.length;i++){
	document.writeln("String[" + newarr[i].length + "]:" + newarr[i] + "<br />");
}
</script>

実は最初に、サイクルの中で直接にslice(s,e)を使って配列を切り取るという考えがありましたが、実際の過程では効率が数百倍遅くなっています.
参照
var temparr=[];
for(var j=0;j<spl;j+){
var curr=i*spl+j;
if(currtemparr.push(arr[curr])
)
みんなも引き続き自分の考えを話してもいいです.