JavaScript

时间:2018-02-26 15:57:06

标签: javascript arrays multidimensional-array

我正在尝试在javascript中创建一个多维数组。

以下代码生成以下错误:0x800a138f - JavaScript运行时错误:无法设置属性' 0'未定义或空引用



var data = [["Timestamp", "kWh Produced", "kWh Used"]];

data[1][0] = "test";




我认为我需要某种方式"预先分配"数组,因此它知道它是多维的。

我将在for循环中一次一行地填充这个数组,如果这样可以更简单。

我该怎么做?

5 个答案:

答案 0 :(得分:1)

此代码将解决您的问题data[1] = []它会在此位置创建一个新数组。

var data = [["Timestamp", "kWh Produced", "kWh Used"]];
data[1] = [];
data[1].push("test")
console.log(JSON.stringify(data)); // [["Timestamp","kWh Produced","kWh Used"],["test"]]

答案 1 :(得分:1)

如您的日志所示,data[1]undefined

有许多方法可以将data[0–99]的值定义为空数组。例如,在es6中,Array(100).fill([])。请参阅https://stackoverflow.com/a/41246860/1664393

答案 2 :(得分:0)

问题是“data”是一个包含单个元素(三个字符串的数组)的数组,因此data[1]未定义。

var data = [["Timestamp", "kWh Produced", "kWh Used"]];
// data[1] // => undefined

您只需将新值附加(或分配)到数据数组即可使用它们。

data.push([]); // or data[1] = []
data[1]; // => []
data[1][0] = "test";
data[1]; // => ["test"]
data[1].push("foo");
data[1]; // => ["test", "foo"]

答案 3 :(得分:0)

  • 在JS作为其他编程语言时,数组的索引是从零开始的。
  • 您尝试从索引1获取值,但该索引等于当前数组length = 1
  0 <--- Position 
  |
  v                
[ ["Timestamp", "kWh Produced", "kWh Used"] ]
                                            ^
                                            |
                                            +---- Length = 1

因此,data[1]无效,因为它超出了数组的边界。

您需要获得第一个位置:data[0][0]并将其替换为新值。

var data = [["Timestamp", "kWh Produced", "kWh Used"]];

data[0][0] = "test";
console.log(data);

如果您想添加新值,则需要获得第一个位置:data[0]并推送新值。

var data = [["Timestamp", "kWh Produced", "kWh Used"]];

data[0].push("test");
console.log(data);

答案 4 :(得分:-1)

谢谢大家。

安德鲁·布恩建议,在data[1] = []之前添加data[1][0] = "test"就可以了。