2016-05-27 155 views
1

我有一個數組:[1, 2, 3, 4, 5, 6, 7, 8, 9]創建使用環路(JavaScript的)從一維陣列2D陣列

我想創建具有三個一維數組的2D陣列。函數變量中的每個NUM是每個1D數組的長度。 結果應該是[[1, 2, 3], [4, 5, 6], [7, 8, 9]]

但我得到的全部是,,3,,,6,,,9。我究竟做錯了什麼?

function infiniteLoop(arr, num) { 
 
    var answer = []; 
 
    var count = 0; 
 
    for (let i = 0; i < num.length; i++) { 
 
    for (let j = 0; j < num[i]; j++, count++) { 
 
     answer[i] = []; 
 
     answer[i][j] = arr[count]; 
 
    } 
 

 
    } 
 
    return answer; 
 
} 
 

 
document.write(infiniteLoop([1, 2, 3, 4, 5, 6, 7, 8, 9], [3, 3, 3]));

+0

請不要修改建議納入你的問題,因爲答案無效在以前版本的問題。關於你的編輯,你在錯誤的地方加了'answer [i] = [];'部分。再看看我的回答,或者托馬斯(但不要使用'new Array()')。 – nnnnnn

+0

對不起,編輯。試圖幫助) –

回答

4

的JavaScript之前沒有多維數組本身什麼它有數組的數組。

當您嘗試使用answer[i][j]的是,answer[i]部分是undefined因爲你沒有將其設置爲任何事情 - 在這一點上answer只是一個空數組。您需要設置answer[i] = [];將第一個元素answer設置爲空數組,然後然後可以使用answer[i][j]

,將適合在現有的循環是這樣的:

for (let i = 0; i < num.length; i++) { 
    answer[i] = []; // <--- add this 
    for (let j = 0; j < num[i]; j++, count++) { 
     answer[i][j] = arr[count]; 
    } 
} 
1

沒有測試它,我相信你需要設置答案[I] = []你環路你的下一個陣列

0

的問題是,answer[i]是不確定的。該解決方案是將下面的語句添加到第一個的開始for循環:

answer[i] = []; 

這應該初始化answer[i]作爲一個數組,從而使您可以設置單獨的指數吧。

1

answer[i]尚未創建。您正嘗試將值分配給不存在的內容。您需要創建answer[i]這樣的:

answer[i] = new Array(num[i]); 

所以,全碼:

function infiniteLoop(arr, num) { 
    var answer = []; 
    var count = 0; 
    for (var i = 0; i < num.length; i++) { 
    answer[i] = new Array(num[i]); 
    for (var j = 0; j < num[i]; j++, count++) { 
     answer[i][j] = arr[count]; 
    } 
    } 
    return answer; 
} 

document.write(infiniteLoop([1, 2, 3, 4, 5, 6, 7, 8, 9], [3, 3, 3]));