[英]JavaScript: Convert a 1D array into a 2D array by a given size
做一個名為“ Chunky Monkey”的freeCodeCamp挑戰。 目的是創建一個具有兩個參數的函數:一維array
和size
的數字。
該數組將被分成多個長度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.