繁体   English   中英

JavaScript:按给定大小将一维数组转换为二维数组

[英]JavaScript: Convert a 1D array into a 2D array by a given size

做一个名为“ Chunky Monkey”的freeCodeCamp挑战。 目的是创建一个具有两个参数的函数:一维arraysize的数字。

该数组将被分成多个长度size (不超过该数量)的组,从而创建一个2D数组。

在我的第一次尝试中,我的代码是:

 function chunkArrayInGroups(arr, size) { var set = arr.length / size; var count = 0; set = Math.ceil(set); //ensure that an integer is obtained var array = []; for (var i = 0; i < set; i++) { array[i] = []; //ensure each element i is an array for (var j = 0; j < size; j++) { array[i][j] = arr[count]; //obtain values from passed array, arr count++; } } return array; } var result = chunkArrayInGroups(["a", "b", "c", "d"], 2); console.log(result); 

我已经跟踪了几次该代码,但是我不能说出它为什么是错误的。 有人可以发现其中的错误吗?

我最终使用稍微不同的方法解决了该问题,并且有效,但是我对为什么上面的代码不起作用非常感兴趣。

一旦计数达到最大限制,就需要中断循环:

 function chunkArrayInGroups(arr, size) { var set = arr.length/size; var count = 0; set = Math.ceil(set); //ensure that an integer is obtained var array = []; out: for(var i = 0; i<set; i++){ array[i] = []; //ensure each element i is an array for (var j=0; j<size; j++){ if (count === arr.length) { break out; } array[i][j] = arr[count]; //obtain values from passed array, arr count++; } } return array; } var result = chunkArrayInGroups([0, 1, 2, 3, 4, 5, 6, 7, 8], 4); console.log(result); 

该代码正在运行(有一些例外,请参阅console.log( chunkArrayInGroups(["a", "b", "c", "d"], 5) );和@shaochuancs回答),但是您可以尝试利用本机方法的更简单方法,例如(请参阅函数):

 function chunkArrayInGroups(arr, size) { var set = arr.length/size; var count = 0; set = Math.ceil(set); //ensure that an integer is obtained var array = []; for(var i = 0; i<set; i++){ array[i] = []; //ensure each element i is an array for (var j=0; j<size; j++){ array[i][j] = arr[count]; //obtain values from passed array, arr count++; } } return array; } function chunk( arr, size ) { var chunkedArray = []; while ( arr.length > 0 ) { chunkedArray.push( arr.splice( 0, size ) ); } return chunkedArray; } console.log( chunkArrayInGroups(["a", "b", "c", "d"], 2) ); console.log( chunkArrayInGroups(["a", "b", "c", "d"], 5) ); console.log( chunkArrayInGroups([], 2) ); console.log( chunk(["a", "b", "c", "d"], 2) ); console.log( chunk(["a", "b", "c", "d"], 5) ); console.log( chunk([], 2) ); 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM