|
Обход массива в строгом порядке
В ходе разработки получился массив-объект с числовыми ключами. К примеру, такой:
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", ""). И мне это не нравится... |
Часовой пояс GMT +3, время: 15:45. |
|