Создание массивов в Javascript - PullRequest
6 голосов
/ 03 марта 2012

Я немного новичок в javascript, и у меня возникли небольшие проблемы, когда я собираюсь сделать 2d (или, возможно, мне может понадобиться 3d) массив в javascript.

В настоящее время у меня есть 2 части информации, которые мне нужнысобирать: идентификатор и значение, поэтому я создал следующее:

var myArray = [];

var id = 12;
var value = 44;

myArray[id]=value;

Но я понял, что это не так просто перебрать массив, как цикл for, поэтому я думал об этом:

myArray[myArray.length] = id;
myArray[myArray.length-1][id]=value;

Я хотел сделать это так, чтобы в цикле for я мог легко получить идентификаторы и значения, но вышеприведенное возвращает значение, только когда я перебираю цикл.Любые предложения о том, как заставить это работать или есть лучший способ сделать это?

Спасибо

Ответы [ 3 ]

15 голосов
/ 03 марта 2012

Почему бы не использовать массив из объекта хэш es?Этот подход позволяет хранить несколько значений в формате ключ: значение:

var myArray = [];
var myElement = {
  id: 12,
  value: 44
}

myArray[0] = myElement;

Затем можно выполнить цикл по всем элементам в myArray следующим образом:

var i = 0,
    el;

while (el = myArray[i++]) {
  alert(el.id + '=' + el.value);
}
2 голосов
/ 03 марта 2012

Я думаю, что вам нужна словарная структура (в JS это называется объектом), например, {id => value}

В JS вы можете сделать что-то вроде этого:

var myDict = { 'myId' : 'myValue' };
myDict[12] = 44; // from your example and this will be added to myDict
myDict[11] = 54;

for (var key in myDict) {
  console.log('key: ' + key + ', value: ' + myDict[key]);
}​

Вывод будет:

ключ: 11, значение: 54

ключ: 12, значение: 44

ключ: myId, значение: myValue

0 голосов
/ 03 марта 2012

Вероятно, лучший способ создания многомерных массивов - это создание на лету с помощью циклов.

, чтобы вы могли иметь как array[x][y][z], как я видел ваш тег 3D-array.

Зацикливание впадины не так уж сложно, вы можете проверить длину массива, когда достигнете конца одного измерения, например, z увеличьте y на единицу и сбросьте z до 0.

Пример конструктора 2d-массива:

function Array2d(x,y){

    var array = new Array(x);

    while(x>0){
        array[x]=new Array(y);
        x--;
    }

    return array;
}

, чтобы создать 2d-массив, который вы можете использовать следующим образом:

var myMatrix = Array2d(4,4);

это генерирует пустую матрицу 4x4 myMatrix[4][4]

(0,0) (1,0) (2,0) (3,0)
(0,1) (1,1) (2,1) (3,1)
(0,2) (1,2) (2,2) (3,2)
(0,3) (1,3) (2,3) (3,3)

для создания трехмерных или более измерений просто поместите другой цикл внутри цикла.


примечание: я не проверял эту функцию, это всего лишь алгоритм, вы должны проверить ввод,если вы вставите отрицательную длину или число с плавающей запятой, это может привести к сбою браузера.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...