我一直在做一些研究,但没有取得任何成果。我遇到一种情况,我需要一个数组来包含可能可变数量的数组。根据下面的例子,你有什么想法吗?
var masterArray = [];
function PrepData(inVal) {
var amt = inVal.split("|");
for (var i = 0; i < amt.length; i++) {
// !!!Trouble area!!!
masterArray[i].push = amt[i];
};
}
我正在做的是将 12 个月的数据输入到此函数中,因此每次激活调用函数时 PrepData 都会运行 12 次。变量 inVal 可以包含类似“9|9|0”或“9|123|470|1500|13”的内容。我想要做的是将管道上的传入值拆分并将结果存储在 amt 中。然后我想将 amt 中的每个值输入到 masterArray 中的各个数组中。好消息是,一旦第一个值进入,inVal 的长度就保持不变,因此,如果 12 次迭代中的第一个迭代 split 成 3 部分,那么其他 11 次迭代也会 split 成 3 部分。简单来说,以下是我期望在给定此输入的情况下典型运行会产生的结果:
Oct: "1|2|1300"
Nov: "1|3|1400"
Dec: "2|5|1450"
Jan: "3|6|1900"
Feb: "4|8|2015"
Mar: "4|8|2020"
Apr: "19|38|3200"
May: "30|42|3500"
Jun: "32|50|5000"
Jul: "48|72|6300"
Aug: "50|150|7500"
Sep: "80|173|9000"
一旦所有十二个都运行完 PrepData,我应该有一个包含以下内容的数组:
masterArray[0] == {1, 1, 2, 3, 4, 4, 19, 30, 32, 48, 50, 80} // All the numbers from the first section
masterArray[1] == {2, 3, 5, 6, 8, 8, 38, 42, 50, 72, 150, 173} // All the numbers from the second section
masterArray[2] == {1300, 1400, 1450, 1900, 2015, 2020, 3200, 3500, 5000, 6300, 7500, 9000} // All the numbers from the third section
如果每个月包含一个包含 5 个部分的字符串,则 masterArray 需要能够从 [0] 到 [4],依此类推。上面的问题区域不起作用,所以我显然错过了一些东西,但不知道那可能是什么。
最佳答案
这是更新后的代码
var masterArray = [];
function PrepData(inVal){
var amt = inVal.split("|");
for (i in amt) {
if(typeof masterArray[i] == 'undefined'){
masterArray[i] = [];
}
masterArray[i].push(amt[i]);
}
}
需要首先检查masterArray中的每个索引是否定义了数组。如果未定义,则需要将其初始化为空白数组。然后你可以推送分割后的值,你会得到相同的结果
masterArray[0] == {1, 1, 2, 3, 4, 4, 19, 30, 32, 48, 50, 80}
masterArray[1] == {2, 3, 5, 6, 8, 8, 38, 42, 50, 72, 150, 173}
masterArray[2] == {1300, 1400, 1450, 1900, 2015, 2020, 3200, 3500, 5000, 6300, 7500, 9000}
这是 js fiddle 中的演示
关于javascript - 用数组动态填充多维数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25985827/