2012-03-03 4 views
3

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

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

var myArray = []; 

var id = 12; 
var value = 44; 

myArray[id]=value; 

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

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

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

Благодаря

+0

Я смущен тем, что вы пытаетесь сделать. Вы пытаетесь сохранить кучу пар (id, value)? Вам нужно получить значение по id в более позднее время или просто перебрать пары? – takteek

+0

@takteek итерации по парам, поэтому я хочу получить доступ как к значению, так и по id в элементе 0 – user1219627

ответ

14

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

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); 
} 
+1

См. Его в действии по адресу http://jsfiddle.net/rjzaworski/Lb3yW/ – rjz

+0

id и значение не всегда 12 и 44, его независимо от того, что пользователь устанавливает var, если только не существует способ установить myElement.id = 0 myElement.value, тогда установите массив на myElement – user1219627

+0

. Вы только что описали, как это сделать, ха-ха. 'myElement.id = 0' – takteek

0

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

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

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

Exemple конструктор 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) 

Чтобы сделать 3D или больше измерений, просто поместите другой цикл внутри цикла.


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

2

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

В 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

Смежные вопросы