[英]Creating 2d-array from 1d array
對於編程新手,我有一個作業要從1d數組創建2d數組。 我想到了這一點(沒有任何外部資源的幫助,因為它剝奪了學習經驗)。 它適用於我們的教授測試輸入,我只是想知道這是一個丑陋/低效的解決方案。
function twoDArray(arr, lenSubArray) {
var newArr = [];
var placeHolder = 0;
var leftOver = 0;
for (var i = 1; i < arr.length + 1; i++) {
/* if i is a multiple of the specified sub-array size
then add the elements from placeHolder to i
*/
if (i % lenSubArray === 0) {
newArr.push(arr.slice(placeHolder, i));
placeHolder += lenSubArray;
leftOver++; // tells us how many sub-arrays were created
}
}
/* if original array is not divisible by the length of the specified sub-array
then there will be left over values. Retrieve these values and create an
array out of them and add them to the 2d array.
*/
if (!(arr.length % lenSubArray === 0)) {
/* sub-array count multiplied by the length of each
sub-array gives us the right index to retrieve remaining values
*/
leftOver = (leftOver * lenSubArray);
newArr.push(arr.slice(leftOver))
}
return newArr;
}
測試輸入:twoDArray([1、2、3、4、5],3)輸出為:[[1、2、3],[4、5]
你太復雜了:
i
推送到i+lenSubArray
i
增加lenSubArray
和slice足夠聰明,可以正確處理Array的末尾
function twoDArray(arr, lenSubArray) {
var i = 0, result = [];
while(i < arr.length)
result.push( arr.slice(i, i+=lenSubArray) );
return result;
}
您可以使用Array#reduce
並根據索引構建新的數組。
function twoDArray(array, length) { return array.reduce(function (r, a, i) { i % length ? r[r.length - 1].push(a) : r.push([a]); return r; }, []); } console.log(twoDArray([1, 2, 3, 4, 5], 3));
您不需要遍歷數組。 您可以改用Array.prototype.slice
函數。
function twoDArray(a, b){
return (Array(Math.ceil(a.length / b)) + '').split(',').map(function(c, d){
return a.slice(b * d, b * (d + 1));
});
}
這是你的稱呼
var a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12];
console.log(twoDArray(a, 3));
// Output:
// [
// [1, 2, 3],
// [4, 5, 6],
// [7, 8, 9],
// [10, 11, 12]
// ]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.