Issue with multi-dimensional arrays in JavaScript

-1

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?

javascript
arrays
multidimensional-array
asked on Stack Overflow Feb 26, 2018 by Pfredd • edited Feb 26, 2018 by Andrew Bone

5 Answers

1

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"]]

answered on Stack Overflow Feb 26, 2018 by аlex dykyі • edited Feb 26, 2018 by аlex dykyі
1

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.

answered on Stack Overflow Feb 26, 2018 by user
0

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"]
answered on Stack Overflow Feb 26, 2018 by maerics
0
  • In JS as others programming languages, the array's indexes are zero-based.
  • You're trying to get a value from index 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);

answered on Stack Overflow Feb 26, 2018 by Ele • edited Feb 26, 2018 by Ele
-1

Thanks everyone.

Adding data[1] = [] before the data[1][0] = "test", as suggested by Andrew Boone, did the trick.

answered on Stack Overflow Feb 26, 2018 by Pfredd • edited Feb 26, 2018 by Andrew Bone

User contributions licensed under CC BY-SA 3.0