[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Инициализация ассоциативного массива
web-dev
Приветствую.
Скажите пожалуйста, можно ли в JS объявить и инициализировать ассоциативный массив с переменными.
Аналог php-кода:

$category=array('color'=>'green', 'music'=>'rock');


В JS можно так?



Спустя 6 минут, 42 секунды (17.03.2010 - 11:45) Игорь_Vasinsky написал(а):
ДА biggrin.gif если ты это хотел услышать...


Первый тип новых объектов, которые мы рассмотрим, являются массивы. Тип "Array" введен в JavaScript 1.1 для возможности манипулирования самыми разными объектами, которые отображаются Navigator'ом. Это - список всех гипертекстовых ссылок данной страницы Website, список всех картинок на данной странице, список всех applet'ов данной страницы, список всех элементов формы и т.п. Пользователь может создать и свой собственный массив, используя конструктор Array().


new_array = new Array()
new_array5 = new Array(5)
colors = new Array ("red","white","blue")

Спустя 3 минуты, 56 секунд (17.03.2010 - 11:49) web-dev написал(а):
Мне надо с присваиванием элементам значений.
Вот как то так colors = new Array ("red"='туту',"white"="ololo","blue"="это ок")

Спустя 10 минут, 19 секунд (17.03.2010 - 11:59) Oyeme написал(а):
var my_cars= new Array()
my_cars["cool"]="Mustang";
my_cars["family"]="Station Wagon";
my_cars["big"]="SUV";

Спустя 2 минуты (17.03.2010 - 12:01) Игорь_Vasinsky написал(а):
colors = new Array ("туту", "ololo","это ок");

или работай с этим.... я вспоминаю......

red = colors[0];
white = colors[1];
blue = colors[2];




Спустя 2 минуты, 42 секунды (17.03.2010 - 12:04) web-dev написал(а):
Oyeme
Игорь_Vasinsky

Спасибо за ответы. Я понял, но лучше было ответить просто: "Нет". smile.gif

Спустя 27 секунд (17.03.2010 - 12:04) sergeiss написал(а):
Ассоциативный
var cfg_menu=new Array();
cfg_menu['page_common']='common';
cfg_menu['page_ho']='ho';
cfg_menu['page_pwr']='pwr';


А если определить так
myArray = new Array("Hello", myVar, 3.14159)

то, насколько я понимаю, индексы будут только численные, и начинаться с нуля.

PS. Вот шустрый народ... wink.gif Пока ответ пишешь, уже успевают навалять кучу ответов.

Спустя 7 минут, 41 секунда (17.03.2010 - 12:12) Игорь_Vasinsky написал(а):
biggrin.gif держим марку....

Цитата
Спасибо за ответы. Я понял, но лучше было ответить просто: "Нет"

честно скажу я в php? то от массивов бегаю.... тебе надо кого нить пригласить - посмотри ко больше в разделе JS сидит.

тока ссылки с темой в пейджер не суй ...

Спустя 33 секунды (17.03.2010 - 12:12) web-dev написал(а):
Цитата
PS. Вот шустрый народ...

за это и люблю я этот форум laugh.gif

Спустя 2 часа, 33 минуты, 31 секунда (17.03.2010 - 14:46) ZSH написал(а):
можно еще так:

massiv = {
key1 : 'value1',
key2 : 'value2',
key3 : 'value3',
key4 :{
key41: 'value4',
key42: 'value5',
key43: 'value6'
},
key5: 'value7'
};

alert(massiv.key2) // value2
alert(massiv.key4.key42) // value5

Спустя 2 часа, 10 минут, 57 секунд (17.03.2010 - 16:57) andyp написал(а):
Нужно только учесть следующее.
В последнем случае


massiv = {
key1 : 'value1',
key2 : 'value2',
key3 : 'value3',
key4 :{
key41: 'value4',
key42: 'value5',
key43: 'value6'
},
key5: 'value7'
};

это строго говоря будет объект, а не массив, хотя массив это тоже объект.
Т.е. свойства length, которое имеют все массивы здесь нет.
massiv.length - undefined.
К нецелочисленным элементам можно обращаться так
massiv.key1,
или так massiv['key1']


А в этом случае

var cfg_menu=new Array();
cfg_menu['page_common']='common';
cfg_menu['page_ho']='ho';
cfg_menu['page_pwr']='pwr';
cfg_menu[0]='value_for_index_0';

нужно принять во внимание что свойство массива cfg_menu.length выведет 1.

Поэтому, в том понимании, в котором есть ассоциативные массивы в PHP, в JS нету.


Спустя 44 минуты, 16 секунд (17.03.2010 - 17:41) sergeiss написал(а):
Цитата (andyp @ 17.03.2010 - 17:57)
А в этом случае
---
var cfg_menu=new Array();
cfg_menu['page_common']='common';
cfg_menu['page_ho']='ho';
cfg_menu['page_pwr']='pwr';
---
нужно принять во внимание что свойство массива cfg_menu.length выведет 1.

В Опере вообще 0 выдает... Вообще-то да, мы создаем скорее не массив, а набор свойств. К которым можем потом обратиться в цикле for, который в данном случае подобен циклу foreach в ПХП:
for( a in cfg_menu )
{
alert( a ); // простейший вариант обработки; выведет последовательно common, ho, pwr
}

Можно ли определить общее количество свойств объекта - вот тут я задумался... Вроде бы можно smile.gif, но не помню, как именно. Но можно и свою функцию сделать, на базе только что указанного цикла.

Спустя 4 часа, 16 минут, 5 секунд (17.03.2010 - 21:57) andyp написал(а):
Цитата (sergeiss @ 17.03.2010 - 14:41)
В Опере вообще 0 выдает...


У Вас Опера выдает 0, потому что Вы не прописали еще
 cfg_menu[0]='value_for_index_0'; 

что есть в моем примере
smile.gif

Спустя 1 час, 12 минут, 3 секунды (17.03.2010 - 23:09) glock18 написал(а):
гм-гм, единственный ответ правильный smile.gif вот этот

massiv = {
key1 : 'value1',
key2 : 'value2',
key3 : 'value3',
key4 :{
key41: 'value4',
key42: 'value5',
key43: 'value6'
},
key5: 'value7'
};


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

arr['key'] = value;


arr уже будет объектом.

кстати

for( a in cfg_menu )
{
alert( a ); // простейший вариант обработки; выведет последовательно common, ho, pwr
}


подобный проход по обычному массиву даст помимо элементов еще свойство length. так что с этим всегда нужно быть осторожней. заметьте, что object не имеет никаких свойств и методов кроме тех, которые дадите ему вы. прекрасное качество - ничего лишнего, а с использованием прототипов можно получить мощный инструмент для работы с объектами в js.

Спустя 1 час, 45 минут, 16 секунд (18.03.2010 - 00:54) andyp написал(а):
Да, таким образом наш объект можно наделить и свойством length и другими свойствами и всеми которые напишите сами.

И еще. alert(typeof cfg_menu) выведет во всех браузерах object и alert(typeof massiv) выведет то же самое, потому что оба являются объектами, в том числе и массив


_____________
IT - это такая область, что приходится постоянно бежать вперед, чтобы оставаться на месте.
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.