繁体   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