Я пытаюсь создать многомерный массив в JavaScript.

Следующий код генерирует следующую ошибку: 0x800a138f - ошибка времени выполнения JavaScript: невозможно установить свойство '0' с неопределенной или нулевой ссылкой

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

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

Я предполагаю, что мне нужно как-то «предварительно выделить» массив, чтобы он знал, что он многомерен.

Я буду заполнять этот массив по одной строке за раз в цикле for, если это упростит задачу.

Как мне это сделать?

-1
Pfredd 26 Фев 2018 в 18:57

5 ответов

Лучший ответ

Как показывает ваш журнал, data[1] равен undefined.

Есть несколько способов определить значения data[0–99] как пустые массивы. Например, в es6 Array(100).fill([]). См. https://stackoverflow.com/a/41246860/1664393.

1
user 26 Фев 2018 в 16:08

Проблема в том, что «данные» - это массив с одним элементом (массив из трех строк), поэтому 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"]
0
maerics 26 Фев 2018 в 16:07

Этот код решит вашу проблему 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
аlex dykyі 26 Фев 2018 в 16:18
  • В 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);
0
Ele 26 Фев 2018 в 16:15

Спасибо всем.

Добавление data[1] = [] перед data[1][0] = "test", как предположил Эндрю Бун, сработало.

-1
Andrew Bone 26 Фев 2018 в 16:13