Обход массива в строгом порядке
В ходе разработки получился массив-объект с числовыми ключами. К примеру, такой:
var words={"4": "who", "1": "are", "5": "you"}При его обходе с помощью for (var i in words) { document.write(words[i]) }мне нужно, чтобы он выдал "who are you", то есть, чтобы обход был строго в том порядке, в каком я этот массив инициализировал. А на деле массив сортируется по возрастанию ключей и сначала обрабатывается words[1], потом words[4], words[5]. Можно как-то этого избежать? Спасибо за внимание. |
Цитата:
|
Объект? Его ведь всё равно можно условно назвать ассоциативным массивом.
Если бы индексы были не числовыми, обход был бы в нужном порядке. Но у меня весь остальной код рассчитан на то, что обращение к нему будет по числовому id. |
А в объектах правильный порядок (даже тот, что задан инициализацией) вообще не гарантируется.
|
Хз, у меня всё работает.
<script> var words={"4": "who ", "1": "are ", "5": "you "} for (var i in words) { document.write(words[i]) } </script> |
У меня сработало только в Safari. В Опере и Хроме "are who you".
Раз стандартом ничего не гарантируется, то на это не стоит рассчитывать. Похоже, придётся делать ещё один массив, где будут в нужном порядке указаны ключи для ассоциативного. Другого выхода нет? |
Цитата:
|
Скажите зачем оно надо, возможно есть решение проще.)
|
Цитата:
В случае с массивами правильный порядок достигается тем, что индексы в правильном порядке перебираем мы сами (i = 0; i < n; ++i), а не движок (как в случае с for ... in ...) |
Серверная часть сортирует предложения (товары) и пишет в <script> массив вида "4321":{"display":0,"data":{данные о товаре}}.
Посетитель выбирает разные фильтры, производит какие-то действия, на их основании скрипт выставляет флаги display. Потом нужные данные загружаются Аяксом и их нужно отобразить в списке <ul>. Для этого я и иду циклом for, и добавляю предложение в ul, если display==1. Важно, чтобы в ul они появились в отсортированном сервером порядке. Мне было удобно, что к массиву можно обращаться по id товара. Весь код так написан. У меня в профиле ссылка на сайт. Пока временно решил проблему, добавив к ключам букву "o". И каждый раз при обращении к массиву пишу offers["o"+id], а в цикле for, чтобы получить id пишу i.replace("o", ""). И мне это не нравится... |
Сделаю массив order=["3674", "1834", "4561"...]
и при выводе предложений буду идти по этому массиву с помощью (i = 0; i < n; ++i), а нужное предложение находить через offres[ order[i] ] . По-моему, самое нормальное. Всем спасибо. |
очередной велосипед
Цитата:
Цитата:
|
Цитата:
|
Цитата:
а можно в двух словах об этом механизме? |
я конечно понимаю что я могу переписать данные в файл присвоить ему расширение js. но я могу сделать все эти действия с помощью ехе файла . не думал что рнр может подобное
|
Цитата:
Цитата:
|
Хорошо поставлю вопрос по другому. в скрипте чтобы подрузить js скрипт необходимо знать его адрес-т.е он должен быть создан и сохранён на сервере. так отсюда два вопроса как в скрипте можно подгрузить динамический скрипт какой не имеет адреса. и второй какой в этом случае механизм формирования скрипта на сервере.
|
Цитата:
<?php $filedir = end(glob('www/path/*.js', GLOB_NOSORT)); //путь к файлу if(file_exists($filedir)){ //проверяем есть ли уже такой файл unlink($filedir); //если есть удаляем if(!file_exists($filedir)){ //если удалили - создаем $create = fopen('www/path/script.js', "w"); fwrite($create, 'alert(true);'); // пишем значение в файл fclose($create);//закрываем дескриптор файла } } //добавляем в документ echo '<script type=\"text\/javascript\" src=\"'.$filedir.'"><\/script>'; ?> |
Цитата:
Генерировать яваскрипт на php вообще никакой проблемы. Зачем создавать файлы? echo '<script type="text/javascript">alert(true);</script>'; |
monolithed,
Спс. nibble, не сохраняякак ты обратишся к файлу скрипта? |
dmitriymar,
путь на сайте не обязательно файл. Весь сайт (включая картинки, стили и скрипты) может вообще из одного файла состоять. |
Kolyaj ну мы же знаем что так лучше не делать))
|
момент с одним файлом ясен. не ясно вот этот момент получения скрипта нового из javascript без записи этого скрипта в каталог сервера
|
Цитата:
|
та есть там прикол-таже интравеб. конечно не имеет никакого отношения к скрипту. интересовал ответ на этот вопрос.
Цитата:
|
Цитата:
Функция phpinfo, например. dmitriymar, у вас в голове слишком сильная связь "адрес на сайте-путь к файлу". Эта связь существует (не у вас в голове, а вообще) потому, что веб-серверу так легче объяснять, что отдавать на различные запросы. Вообще говоря, необязательно где-то там должен присутствовать какой-то файл. Браузер вообще ничего о сервере не знает, ему всё равно, какие там на сервере файлы. |
Цитата:
<?php if ($_GET['js']) { echo "alert(1);"; } else { ?> <html> <head> <script src="?js=1"></script> </head> <body></body> </html> <?php } ?> |
всёттаки у клиента средствами рнр а не javascript информация получаеться. а я спрашивал как средствами только скрипта получить не сохранённый на сервере скрипт.
|
JavaScript тоже на сервере может выполняться.
|
я это знаю-но для этого нужен сервер с поддержкой яваскрипта. вопрос был о клиенте и о средствах скрипта
|
Тогда это вообще глупо: если скрипт генерируется на клиенте, то он там же и выполняется, зачем какие-то пути на сервере задавать, если сервер не участвует в процессе?
|
перичатай тему.сам ведь задал что на сервере скрипт не обязательно сохранять.
|
Не обязательно сохранять, его можно там генерировать в момент запроса.
|
это ясно. момент в том можноли его получать и работать с ним средствами javascript без рнр
если я правильно понял то конструкция с подгружаемым скриптом в варианте просто запроса скрипта по его адресу с клиента не пройдёт -в этом варианте идет обращение именно к сохранённому на сервере скрипту.Мне непонятен сам запрос с клиента в этом случае скриптом . |
dmitriymar Мы (не)создаем отдельный файл с расширением js, ложем его в к.л. каталог и подключаем этот файл ( к примеру в index.php)
т.е. на выходе в исходном коде страницы сайт будет красоваться дескриптор script или к.л. другой. Тот файл, что мы создали и подключили сценарий может меняться как угодно и когда когда угодно, а может и не меняться что тут не ясно? |
Вот в таком виде ясно
|
Часовой пояс GMT +3, время: 16:00. |