[英]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
阵列切片i
和i
+ 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.