Estoy tratando de crear una matriz multidimensional en javascript.

El siguiente código genera el siguiente error: 0x800a138f - Error de tiempo de ejecución de JavaScript: no se puede establecer la propiedad '0' de referencia indefinida o nula

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

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

Supongo que necesito de alguna manera "preasignar" la matriz para que sepa que es multidimensional.

Completaré esta matriz en una fila a la vez en un bucle for si eso simplifica algo.

¿Cómo hago esto?

-1
Pfredd 26 feb. 2018 a las 18:57

5 respuestas

La mejor respuesta

Como lo indica su registro, data[1] es undefined.

Hay varias formas de definir los valores de data[0–99] como matrices vacías. En es6, por ejemplo, Array(100).fill([]). Consulte https://stackoverflow.com/a/41246860/1664393.

1
user 26 feb. 2018 a las 16:08

El problema es que "datos" es una matriz con un solo elemento (una matriz de tres cadenas), por lo que data[1] no está definido.

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

Simplemente necesita agregar (o asignar) nuevos valores a la matriz de datos para utilizarlos.

data.push([]); // or data[1] = []
data[1]; // => []
data[1][0] = "test";
data[1]; // => ["test"]
data[1].push("foo");
data[1]; // => ["test", "foo"]
0
maerics 26 feb. 2018 a las 16:07

Este código solucionará su problema data[1] = [], crea una nueva matriz en esta posición.

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
аlex dykyі 26 feb. 2018 a las 16:18
  • En JS como otros lenguajes de programación, los índices de la matriz están basados en cero.
  • Está intentando obtener un valor del índice 1, sin embargo, ese índice es igual a la matriz actual length = 1.

  0 <--- Position 
  |
  v                
[ ["Timestamp", "kWh Produced", "kWh Used"] ]
                                            ^
                                            |
                                            +---- Length = 1

Entonces, data[1] no es válido porque está más allá de los límites de la matriz.

Debe obtener la primera posición: data[0][0] y reemplazarla con el nuevo valor.

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

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

Si desea agregar un nuevo valor, debe obtener la primera posición: data[0] y presionar el nuevo valor.

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

data[0].push("test");
console.log(data);
0
Ele 26 feb. 2018 a las 16:15

Gracias a todos.

Agregar data[1] = [] antes de data[1][0] = "test", como lo sugirió Andrew Boone, hizo el truco.

-1
Andrew Bone 26 feb. 2018 a las 16:13