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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Неассоциативный массив с явными значениями ключей, Как его создать за одну операцию 
:(
    Опции темы
1234ru
Дата 22.6.2010, 08:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Есть ли в Javascript конструкция, позволяющая создать обычный массив (не хэш) из нескольких элементов с явными значениями ключей, не описывая каждый элемент в отдельности? Т.е. за одну операцию, как, например, в PHP:

Код
array(1 => 'один', 10 => 'десять', 100 => 'сто')


?
PM MAIL   Вверх
Amphiluke
Дата 22.6.2010, 13:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


   ☽
***


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

Репутация: 39
Всего: 112



Цитата(1234ru @  22.6.2010,  12:15 Найти цитируемый пост)
Есть ли в Javascript конструкция, позволяющая создать обычный массив (не хэш) из нескольких элементов с явными значениями ключей, не описывая каждый элемент в отдельности? Т.е. за одну операцию, как, например, в PHP:


Да.
Код

var ar = [,"один",,,,,,,,,"десять",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,"сто"];

alert(ar[1]);
alert(ar[10]);
alert(ar[100]);

PM   Вверх
bars80080
Дата 22.6.2010, 13:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прапор творюет
****
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 12022
Регистрация: 5.12.2007
Где: Königsberg

Репутация: 44
Всего: 315



а обязательно в одну команду? почему бы не так:

Код

var a = new Array();
a[1] = 'odin';
a[10] = 'des';
a[100] = 'sto';

PM MAIL WWW   Вверх
1234ru
Дата 27.6.2010, 12:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата(bars80080)
а обязательно в одну команду?

Да, обязательно. Т.к. сам массив я передаю с сервера в безличном виде: на стороне сервера еще неизвестно, как он должен называться, а какое у него будет имя - определяется на клиенте.

Цитата(Alphiluke)
var ar = [,"один",,,,,,,,,"десять",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,"сто"];
alert(ar[1]);
alert(ar[10]);
alert(ar[100]);

Это вообще жесть. 
Если мне надо ar[1], ar[10], ar[100] и ar[2147483648], мне строку размером в два гигабайта делать? 

Это сообщение отредактировал(а) 1234ru - 27.6.2010, 12:42
PM MAIL   Вверх
ksnk
Дата 27.6.2010, 12:49 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

Репутация: 48
Всего: 386



Цитата(1234ru @  27.6.2010,  12:41 Найти цитируемый пост)
Если мне надо ar[1], ar[10], ar[100] и ar[2147483648], мне строку размером в два гигабайта делать? 

Да!  smile Если именно такие условия ставит тебе заказчик. 
bars80080, намекнул на возможный вариант реализации чем он не подходит?
Код

(function(){
var a = new Array();
a[1] = 'odin';
a[10] = 'des';
a[100] = 'sto';
return $a})()

так достаточно безлично?


--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
Amphiluke
Дата 27.6.2010, 13:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


   ☽
***


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

Репутация: 39
Всего: 112



Цитата(1234ru @  27.6.2010,  16:41 Найти цитируемый пост)
Это вообще жесть.

Чего просили, то вам и было предложено. Прямой ответ на прямой вопрос. smile
PM   Вверх
ksnk
Дата 27.6.2010, 13:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

Репутация: 48
Всего: 386



Кстати, вот такое тоже, как это не удивительно, работает. правда количество установленных параметров вычислить не очень просто, но пробежаться по всем полям объекта, не сложнее, чем по всем элементам массива.
Код

var ar = {1:"один",10:"десять",100:"сто"};
alert(ar[1]);
alert(ar[10]);
alert(ar[100]);




--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
1234ru
Дата 27.6.2010, 19:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Код

(function(){
var a = new Array();
a[1] = 'odin';
a[10] = 'des';
a[100] = 'sto';
return $a})()

ksnk, а как мне это присвоить переменной? (я синтаксис не знаю)
Запись типа var b = (function(..)) ? 
(хорошо бы, чтобы функция тоже была безличной)


Ассоциативный массив не подходит. У меня сначала через него всё и было - пары id=>value отсортированные по алфавиту. У меня с сервера строка приходила вида:
Код

10: 'веники',
15: 'метёлки',
4: 'совки',
3: 'швабры'
...


При формировании HTML-страницы делалось:

Код
var array = { [тут строка с сервера] }


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

Но потом выяснилось, что Опера его перебирает (через for in) не в порядке следования элементов, а в порядке возрастания ключей, и вся моя сортировка сбивается.
Обычные массивы Опера сортирует нормально, поэтому ищу решение через них.


Это сообщение отредактировал(а) 1234ru - 27.6.2010, 19:15
PM MAIL   Вверх
ksnk
Дата 27.6.2010, 21:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

Репутация: 48
Всего: 386



Цитата(1234ru @  27.6.2010,  19:14 Найти цитируемый пост)
ksnk, а как мне это присвоить переменной? (я синтаксис не знаю)

Цитата(1234ru @  27.6.2010,  19:14 Найти цитируемый пост)
var array = { [тут строка с сервера] }

вот так-же, только фигурных скобок не надо.

Что такое вообще "тут строка с сервера". Откуда и как она берется?


--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
1234ru
Дата 9.7.2010, 16:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата(ksnk)
(function(){
var a = new Array();
a[10] = 'des';
a[100] = 'sto';
return $a})()

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


 




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


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

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