Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Сортировка массива с сохранением ключей (https://javascript.ru/forum/misc/68665-sortirovka-massiva-s-sokhraneniem-klyuchejj.html)

рони 02.05.2017 13:27

denis82,
<script>
var models = {};
models[79] = [];

models[79][0]= {'19709' : 'Creta'};
models[79][1]= {'19701' : 'Coupe'};
models[79][2]= {'19725': 'ix35'};
models[79].sort(function() {
    // тут можно сортировать как вам нужно, если будет как структура выше
});
alert(models[79]);
</script>

рони 02.05.2017 13:36

denis82,
<script>
var models = {};
models[79] = [];

models[79][0]= {'19709' : 'Creta'};
models[79][1]= {'19701' : 'Coupe'};
models[79][2]= {'19725': 'ix35'};
models[79].sort(function(a,b) {
  for(var k in a) a = k;
  for(var k in b) b = k;
  return a - b});
document.write(JSON.stringify(models[79]));
</script>

denis82 02.05.2017 18:35

Да, спасибо, Рони, наверное так и нужно делать. Но как тогда потом на выходе получить такой формат:
models[79][19701] = 'Coupe';
models[79][19709] = 'Creta';
models[79][19725] = 'ix35';

рони 02.05.2017 19:32

Цитата:

Сообщение от denis82
Но как тогда потом на выходе получить такой формат

никак

рони 02.05.2017 19:39

denis82,
либо вы измените структуру данных и потом сортируите как угодно, либо забудьте о сортировке.

laimas 03.05.2017 09:22

Цитата:

Сообщение от denis82
наверное так и нужно делать

Данные откуда, кто их формирует в такую структуру? Если это данные из базы, то почему сразу запросом не отсортировать их?

Цитата:

Сообщение от denis82
на выходе получить такой формат

Для чего? Собственно так models[79][19701] и можно получить данные из объекта, а каков синтаксис его описания вам какая разница?

denis82 03.05.2017 17:19

Данные сортируются на стороне клиента в браузере - зависимые списки: марка, модель, поколение, серия, модификация автомобилей. Марки сортирую из БД запросом, но остальные списки сортировать нужно на js. То есть выбрал марку, в зависимости от нее построился список моделей отсортированный по алфавиту с сохранением ключей, чтобы дальше при отправке на сервер передались нужные ключи. Есть скрипт, который управляет списками, подгружая нужный список в зависимости от выбранного, поэтому и желательно подстроить под него синтаксис. Как-то не думал что такие сложности с сортировкой возникнут. В js я совсем слаб, уж простите.

laimas 03.05.2017 17:29

Цитата:

Сообщение от denis82
То есть выбрал марку, в зависимости от нее построился список моделей отсортированный по алфавиту с сохранением ключей, чтобы дальше при отправке на сервер передались нужные ключи.

То есть если поля формы или иные данные отдаваемые клиентом серверу не будут сортированы, то сервер получит "ненужные ключи"? Что за глупость :)

Цитата:

Сообщение от denis82
Марки сортирую из БД запросом, но остальные списки сортировать нужно на js.

С чего вдруг если речь о зависимых списках? Даже если списки не получаются асинхронным запросом, а строятся уже по отданным клиенту данным, это же не мешает их заведомо отсортировать.

denis82 03.05.2017 19:31

Имею в виду что если сделать сортировку, как я писал в первом посте, то ключи присвоятся по порядку: 0, 1, 2, 3 и т.д.

Я пробовал сортировать заранее при выводе данных из базы, сортируется корректно, но после этого
models[<?php echo $id_brand; ?>][<?php echo $k; ?>] = '<?php echo $v; ?>';
в поле select сортировка как будто игнорируется. Вот почему и стал думать как корректно сортировать массив на js. Не могу понять почему сортировка слетает.

foreach ($array2 as $k=>$v) {
$title_model = $v;
$id_model = $k;
?>
models[<?php echo $id_brand; ?>][<?php echo $id_model; ?>] = '<?php echo $title_model; ?>';
<?php
}

рони 03.05.2017 19:38

denis82,
ещё раз: на выходе у вас разреженный массив -- при сортировке -- все значения сдвигаются к началу массива - ключи в данном случае не ключи, а индексы массива -- нужны ключи => делайте обьект -- но обьект невозможно отсортировать, но можно как угодно извлечь данные.


Часовой пояс GMT +3, время: 02:10.