Javascript: многомерный массив с переменной шириной - PullRequest
0 голосов
/ 23 октября 2018

Я хочу создать двумерный массив с переменной шириной.Я инициализировал внешний массив, так как знаю количество строк.

var listofcities = new Array(lengthofcites); //i get this lengthofcitles from another routine

Теперь я получу список объектов в городах из другой подпрограммы в виде списка.Например, listoffacilities = ["water","air"] для города.Для другого города я получу этот список как listoffacilities = ["water","air","electricity"].

. Я смогу сохранить его во внешнем массиве таким образом, чтобы

listofcities[0] = ["water","air"]
listofcities[1] = ["water","air","electricity"]

Я не смогиспользуйте функцию push как listofcities[0].push(listoffacilities) во внутреннем цикле.

Все примеры, которые я мог видеть из Интернета, имеют строки / столбцы одинакового размера.

Ответы [ 2 ]

0 голосов
/ 23 октября 2018

Вы не должны нажимать на конкретный элемент listofcities, просто нажмите на сам массив:

var listofcities = []; // don't specify the length here
listoffacilities = ["water", "air"];
listofcities.push(listoffacilities);
listoffacilities = ["water","air","electricity"];
listofcities.push(listoffacilities);
console.log(listofcities);
0 голосов
/ 23 октября 2018

JavaScript не имеет многомерных массивов;у него есть массивы массивов.Таким образом, многомерные массивы по своей природе зубчатые (термин, при котором не все подчиненные массивы имеют одинаковую длину).

Вы делаете это буквально так, как показано:

var listofcities = []; // No need to pre-allocate length
listofcities[0] = ["water","air"];
listofcities[1] = ["water","air","electricity"];
console.log(listofcities);
.as-console-wrapper {
  max-height: 100% !important;
}

This:

var listofcities = [];

создает пустой внешний массив, а затем эти:

listofcities[0] = ["water","air"];
listofcities[1] = ["water","air","electricity"];

создают подчиненногомассивы (например, ["water","air"]) и сохранить их в этом внешнем массиве.[...] - это инициализатор массива (часто называемый "литерал массива"), который создает массив с элементами в скобках.

Вот пример использования push;обратите внимание, что вы вызываете push для массива (listofcities.push(...)), а не запись в этом массиве (listofcities[0].push(...)).Но как только вы поместите подчиненный массив в качестве записи, вы можете push в этот подчиненный массив (listofcities[0].push(...)).

var listofcities = []; // No need to pre-allocate length
listofcities.push(["water","air"]);
listofcities.push(["water","air","electricity"]);
console.log(listofcities);
.as-console-wrapper {
  max-height: 100% !important;
}
...