簡體   English   中英

將數據從1d陣列推送到2d陣列

[英]Pushing data from a 1d array to a 2d array

我正在嘗試使用1d數組的內容創建一個二維數組。 2d數組具有正確的行數和列數,但是,2d數組的每個索引都包含原始1d數組的全部。

如何打開1d數組:

var OneD = [ "Bristol", "Cardiff", "Birmingham",
             "Luton", "Swansea", "Aberdeen",
             "Birmingham", "Manchester", "Southampton", 
             "Chester", "Swansea", "Brighton",
             "Portsmouth", "Bournemouth", "Glasgow", 
             "Newcastle", "Cardiff", "Bristol"];

進入這個2d數組:

twoD = [
        ["Bristol", "Cardiff", "Birmingham", "Luton", "Swansea", "Aberdeen"],
        ["Birmingham", "Manchester", "Southampton", "Chester", "Swansea", "Brighton"],
        ["Portsmouth", "Bournemouth", "Glasgow", "Newcastle", "Cardiff", "Bristol"]
 ];

我的守則

var twoD = [];
var rows = 3;
var cols = 6;

for (var i = 0; i < rows; i++) {
    twoD.push( [] );
}

for (var i = 0; i < rows; i++) {
    for (var j =  0; j < cols; j++) {
        twoD[i].push(oneD);
    }
}

console.log(twoD);

使用單個for循環。 在每次迭代中,將cols編號添加到i ,並從OneD陣列切片ii + cols之間的項目。 將切片的項目推入twoD數組。

 var OneD = ["Bristol","Cardiff","Birmingham","Luton","Swansea","Aberdeen","Birmingham","Manchester","Southampton","Chester","Swansea","Brighton","Portsmouth","Bournemouth","Glasgow","Newcastle","Cardiff","Bristol"]; var twoD = []; var cols = 6; for(var i = 0; i < OneD.length; i += cols) { twoD.push(OneD.slice(i, i + cols)); } console.log(twoD); 

這樣就可以完成。 但一定要處理遺漏的物品。 這里的數組長度恰好是6個項目的3個部分。

 var OneD = ["Bristol", "Cardiff", "Birmingham", "Luton", "Swansea", "Aberdeen", "Birmingham", "Manchester", "Southampton", "Chester", "Swansea", "Brighton", "Portsmouth", "Bournemouth", "Glasgow", "Newcastle", "Cardiff", "Bristol" ]; var TwoD = []; var cols = 6; var rows = parseInt(OneD.length / cols, 10); // rows = 3 for (var i = 0; i < rows; i++) { TwoD.push(OneD.slice(i * cols, (i * cols + cols))); } console.log(TwoD); 

(要么)

 var OneD = ["Bristol", "Cardiff", "Birmingham", "Luton", "Swansea", "Aberdeen", "Birmingham", "Manchester", "Southampton", "Chester", "Swansea", "Brighton", "Portsmouth", "Bournemouth", "Glasgow", "Newcastle", "Cardiff", "Bristol" ]; var TwoD = OneD.join(',').match(/([^,]*,[\\w]*){5}[,]*/g).map(function(i) {return i.replace(/,$/, '').split(/,/);}); console.log(TwoD); 

你的第二個循環是每次都推動所有的OneD 您需要索引數組。

 var oneD = ["Bristol","Cardiff","Birmingham","Luton","Swansea","Aberdeen","Birmingham","Manchester","Southampton","Chester","Swansea","Brighton","Portsmouth","Bournemouth","Glasgow","Newcastle","Cardiff","Bristol"]; var twoD = []; var cols = 6; var rows = 3; for (var i = 0; i < rows; i++) { twoD.push( [] ); } for (var i = 0; i < rows; i++) { for (var j = 0; j < cols; j++) { twoD[i].push(oneD[i * cols + j]); } } console.log(twoD); 

您還可以將兩個循環合並為一個循環。 並且通過使外部循環增加列數來消除索引計算。 下面的版本也不要求1d數組的長度恰好是rows * cols

 var oneD = ["Bristol","Cardiff","Birmingham","Luton","Swansea","Aberdeen","Birmingham","Manchester","Southampton","Chester","Swansea","Brighton","Portsmouth","Bournemouth","Glasgow","Newcastle","Cardiff","Bristol"]; var twoD = []; var cols = 6; var rows = 3; for (var i = 0; i < oneD.length; i += cols) { var row = []; var maxColIndex = Math.min(i+cols, oneD.length); for (var j = i; j < maxColIndex; j++) { row.push(oneD[j]); } twoD.push(row); } console.log(twoD); 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM