I am trying to create a multidimensional array in javascript.
The following code generates the following error: 0x800a138f - JavaScript runtime error: Unable to set property '0' of undefined or null reference
var data = [["Timestamp", "kWh Produced", "kWh Used"]];
data[1][0] = "test";
I assume that I need to somehow "pre-allocate" the array so it knows that it is multi-dimensional.
I will be filling this array in one row at a time in a for loop if that makes anything simpler.
How do I do this?
This code will fix your problem data[1] = []
it creates a new array at this position.
var data = [["Timestamp", "kWh Produced", "kWh Used"]];
data[1] = [];
data[1].push("test")
console.log(JSON.stringify(data)); // [["Timestamp","kWh Produced","kWh Used"],["test"]]
As your log indicates, data[1]
is undefined
.
There are a number of ways to define the values of data[0–99]
as empty arrays. In es6 for instance, Array(100).fill([])
. See https://stackoverflow.com/a/41246860/1664393.
The problem is that "data" is an array with a single element (an array of three strings), so data[1]
is undefined.
var data = [["Timestamp", "kWh Produced", "kWh Used"]];
// data[1] // => undefined
You simply need to append (or assign) new values to the data array to make use of them.
data.push([]); // or data[1] = []
data[1]; // => []
data[1][0] = "test";
data[1]; // => ["test"]
data[1].push("foo");
data[1]; // => ["test", "foo"]
1
, however that index is equals than the current array length = 1
. 0 <--- Position
|
v
[ ["Timestamp", "kWh Produced", "kWh Used"] ]
^
|
+---- Length = 1
So, data[1]
is invalid because is beyond the array's boundaries.
You need to get the first position: data[0][0]
and replace it with the new value.
var data = [["Timestamp", "kWh Produced", "kWh Used"]];
data[0][0] = "test";
console.log(data);
If you want to add a new value, you need to get the first position: data[0]
and push the new value.
var data = [["Timestamp", "kWh Produced", "kWh Used"]];
data[0].push("test");
console.log(data);
Thanks everyone.
Adding data[1] = []
before the data[1][0] = "test"
, as suggested by Andrew Boone, did the trick.
User contributions licensed under CC BY-SA 3.0