我正在尝试在javascript中创建一个多维数组。
以下代码生成以下错误:0x800a138f - JavaScript运行时错误:无法设置属性' 0'未定义或空引用
var data = [["Timestamp", "kWh Produced", "kWh Used"]];
data[1][0] = "test";

我认为我需要某种方式"预先分配"数组,因此它知道它是多维的。
我将在for循环中一次一行地填充这个数组,如果这样可以更简单。
我该怎么做?
答案 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)
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"
就可以了。