使用数组动态填充多维数组

时间:2014-09-23 02:12:49

标签: javascript arrays multidimensional-array

我一直在做一些研究而且没有到达任何地方。我有一种情况,我需要一个数组来包含可能可变数量的数组。根据以下示例,您有什么想法吗?

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个月&#39;值得将数据放入此函数中,因此每次激活调用函数时,PrepData都会运行12次。变量inVal可以包含类似&#34; 9 | 9 | 0&#34;或&#34; 9 | 123 | 470 | 1500 | 13&#34;。我现在要做的是拆分管道上的传入值并将结果存储在amt中。然后我想将amt中的每个值提供给masterArray中的各个数组。好消息是,一旦第一个值进入,inVal的长度就是常数,所以如果12个迭代中的第一个分成3个,另外11个也会。为了说明这一点,这就是我期望在给出这个输入的情况下产生的典型运行:

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"

一旦所有12个运行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],依此类推。上面的麻烦区域不起作用,所以我显然遗漏了一些东西,但不知道那可能是什么。

1 个答案:

答案 0 :(得分:1)

这是更新后的代码

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

中的演示