簡體   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