Модераторы: Sardar, Aliance
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> корректный вид многомерного массива?? 
:(
    Опции темы
yalo
Дата 28.10.2007, 10:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 210
Регистрация: 24.5.2006

Репутация: нет
Всего: 2



Здравствуйте.
Не знаю почему, но многомерный массив такого типа на яве-скрипт не воспринимается корректно
Код

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">

<head>
  <title></title>
<script type="text/javascript">
//<![CDATA[
  function loadFirms() {
    document.write('here');
}
//]]>
</script>

</head>

<body>
<script type="text/javascript">
 //<![CDATA[
 firmsplace = new Array()
 firmsplace[63]["name"] = "Автофирмы"
 firmsplace[63][75]["name"] = "Автосервис, ремонт и тюнинг"
 firmsplace[63][75][140] = "Автоэвакуатор"
 firmsplace[63][75][110] = "Газобалонное оборудование"
 firmsplace[63][75][100] = "Диагностика"
 firmsplace[63][75][98] = "Оборудование и расходные материалы для автосервиса"
 firmsplace[63][75][99]["name"] = "Ремонт"
 firmsplace[63][75][99][111] = "Ремонт грузовых автомобилей  и спец. техники"
 firmsplace[63][75][99][102] = "Ремонт двигателя"
 firmsplace[63][75][99][103]["name"] = "Ремонт КПП"
 firmsplace[63][75][99][103][104] = "Ремонт АКПП"
 firmsplace[63][75][99][103][105] = "Ремонт МКПП"
 firmsplace[63][75][99][108] = "Ремонт кузова"
 firmsplace[63][75][99][112] = "Ремонт мототехники, гидроциклов, снегоходов"
 firmsplace[63][75][99][106] = "Ремонт подвески"
 firmsplace[63][75][99][107] = "Ремонт ходовой"
 firmsplace[63][75][99][109] = "Ремонт электрики"
 firmsplace[63][75][101]["name"] = "Тюнинг"
 firmsplace[63][75][101][113] = "Тонировка"
 firmsplace[63][75][101][114] = "Тюнинг кузова"
 firmsplace[63][75][101][115] = "Тюнинг салона"
 firmsplace[63][75][101][116] = "Установка и ремонт аудио-видео систем"
 firmsplace[63][75][101][117] = "Установка и ремонт сигнализаций и охранных систем"
 firmsplace[63][73]["name"] = "Продажа автомобилей и спецтехники"
 firmsplace[63][73][92]["name"] = "Грузовые автомобили, автобусы и спец. техника"
 firmsplace[63][73][92][95] = "б/у"
 firmsplace[63][73][92][94] = "Новые"
 firmsplace[63][73][92][93] = "Тракторы, с/х и дорожно-строительная техника"
 firmsplace[63][73][77]["name"] = "Легковые автомобили"
 firmsplace[63][73][77][82]["name"] = "Иностранные"
 firmsplace[63][73][77][82][86]["name"] = "б/у"
 firmsplace[63][73][77][82][86][87] = "Автомобили с аукционов"
 firmsplace[63][73][77][82][85] = "Новые"
 firmsplace[63][73][77][81] = "Отечественные"
 firmsplace[63][73][80] = "Мотоциклы, лидроциклы, снегоходы и прочее"
 firmsplace[63][76]["name"] = "Продажа запчастей и аксессуаров"
 firmsplace[63][76][123] = "Автостекла"
 firmsplace[63][76][124] = "Автошины и диски"
 firmsplace[63][76][125] = "Аксессуары"
 firmsplace[63][76][119]["name"] = "Грузовые автомобили и спец. техника"
 firmsplace[63][76][119][139] = "Иностранные"
 firmsplace[63][76][119][138] = "отечественные"
 firmsplace[63][76][118]["name"] = "Легковые автомобили"
 firmsplace[63][76][118][127]["name"] = "Иностранные"
 firmsplace[63][76][118][127][131] = "Заказ запчастей"
 firmsplace[63][76][118][127][132] = "Запчасти двигателя"
 firmsplace[63][76][118][127][133] = "Запчасти КПП"
 firmsplace[63][76][118][127][135] = "Запчасти кузова, оптика"
 firmsplace[63][76][118][127][134] = "Запчасти подвески, ходовой"
 firmsplace[63][76][118][127][129] = "Контрактные"
 firmsplace[63][76][118][127][128] = "Новые"
 firmsplace[63][76][118][127][137] = "Прочие запчасти"
 firmsplace[63][76][118][127][130] = "Разборки"
 firmsplace[63][76][118][127][136] = "Электрика"
 firmsplace[63][76][118][126] = "Отечественные"
 firmsplace[63][76][122] = "Масла и расходные материалы"
 firmsplace[63][76][120] = "Мототехника, гидроциклы и снегоходы"

 loadFirms();
  //]]>
 </script>
</body>

</html>

Если задачу еще более упрощать до:
Код

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">

<head>
  <title></title>
<script type="text/javascript">
//<![CDATA[
  function loadFirms() {
    document.write('here');
}
//]]>
</script>

</head>

<body>
<script type="text/javascript">
 //<![CDATA[
 firmsplace = new Array()
 firmsplace[63]["name"] = "Автофирмы"
 loadFirms();
  //]]>
 </script>
</body>

</html>


то в таком случае также не воспринимается корректно массив
массив будет принят только если записывать его одномерно, например, так:
Код

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">

<head>
  <title></title>
<script type="text/javascript">
//<![CDATA[
  function loadFirms() {
    document.write('here');
}
//]]>
</script>

</head>

<body>
<script type="text/javascript">
 //<![CDATA[
 firmsplace = new Array()
 firmsplace['name'] = "Автофирмы"
 loadFirms();
  //]]>
 </script>
</body>

</html>


Как же мне тогда его следует записать? Разве ява-скрипт не поддерживает многомерные массивы?

PS Возможно мои проблемы идут из пхп, где запись массивов очень гибкая, возможны практически все возможные логичные записи массива
PM MAIL ICQ   Вверх
cruelangel
Дата 28.10.2007, 15:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 319
Регистрация: 12.9.2007

Репутация: 4
Всего: 8



что значит "не воспринимается корректно"?
PM MAIL   Вверх
vasac
Дата 28.10.2007, 17:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1060
Регистрация: 4.5.2006

Репутация: 13
Всего: 36



Потому что
1. Array, это порядковый массив. Нужны ассоциативные индексы — используйте Object.
2. Каждый объект нужно сначала создать.
Т.е. сначала создать firmslace, потом его элемент с индексом 63, а потом уже в нем элемент "name".
PM WWW   Вверх
yalo
Дата 28.10.2007, 18:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 210
Регистрация: 24.5.2006

Репутация: нет
Всего: 2



Цитата(cruelangel @  28.10.2007,  15:33 Найти цитируемый пост)
что значит "не воспринимается корректно"? 

это значит, что функция, которая вызывается после его объявления, не вызывается, то есть не получаем в итоге document.write('here');


Цитата(vasac @  28.10.2007,  17:09 Найти цитируемый пост)
1. Array, это порядковый массив. Нужны ассоциативные индексы — используйте Object.

Странно..тогда почему такой код работает?
Код

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">

<head>
  <title></title>
<script type="text/javascript">
//<![CDATA[
  function loadFirms() {
    document.write('here');
}
//]]>
</script>

</head>

<body>
<script type="text/javascript">
 //<![CDATA[
 firmsplace = new Array()
 firmsplace["name"] = "Автофирмы"
 loadFirms();
  //]]>
 </script>
</body>

</html>


а вот такой опять же не работает:
Код

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">

<head>
  <title></title>
<script type="text/javascript">
//<![CDATA[
  function loadFirms() {
    document.write('here');
}
//]]>
</script>

</head>

<body>
<script type="text/javascript">
 //<![CDATA[
 firmsplace = new Array()
 firmsplace[63][1] = "Автофирмы"
 loadFirms();
  //]]>
 </script>
</body>

</html>


похоже-то вроде на то,что не нравится многомерность, или я что-то все-таки упускаю? (про объекты тоже попробую поковырять..)
PM MAIL ICQ   Вверх
HotHead
Дата 28.10.2007, 18:48 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 67
Регистрация: 26.10.2007

Репутация: нет
Всего: 4



yalo, первый код работает потому, что вы вызываете конструктор массива и он вам возвращает по сути объект-массив. В ява-скрипте вообще всё что не примитив (т.е. не строчка, число или bool) - то объект. Но пользоваться этим без надобности не стоит, т.к. запутаете всех, включая себя. А так в принципе и код
Код

firmsplace = new String("test");
firmsplace["name"] = "Автофирмы";
alert(firmsplace["name"]); // Автофирмы
alert(firmsplace); // test

не вызовет нареканий. С точки зрения машины по крайней мере.

Второй код не работает, т.к. вы явно не указали, что  firmsplace[63] является массивом. А без этого ява-скрипт сам не догадается. Надо сначала написать firmsplace[63] = new Array() Но, если не ошибаюсь, старые IE почему-то очень не любили такую конструкцию. Так что я предпочитаю писать:
Код

 firmsplace = new Array();
 firmsplace[63] = []; // Второй и все последующие вложенные массивы вводим без явного вызова конструктора
 firmsplace[63][1] = "Автофирмы"; // вместо этого можно было бы написать в предыдущей строке firmsplace[63] = [,"Автофирмы"];
 alert(firmsplace[63]);

PM MAIL   Вверх
cruelangel
Дата 28.10.2007, 20:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 319
Регистрация: 12.9.2007

Репутация: 4
Всего: 8



> это значит, что функция, которая вызывается после его объявления, не вызывается

в таком случае нужно заглянуть в консоль ошибок и там будет написано что не так.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Форум для вопросов, которые имеются в справочниках, но их поиск вызвал затруднения, или для разработчика требуется совет или просьба отыскать ошибку. Напоминаем: 1) чётко формулируйте вопрос, 2) приведите пример того, что уже сделано, 3) укажите явно, нужен работающий пример или подсказка о том, где найти информацию.
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | JavaScript: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0499 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.