Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Интернет » Web-программирование » JS: сортировка

Модерирует : Cheery

 Версия для печати • ПодписатьсяДобавить в закладки

Открыть новую тему     Написать ответ в эту тему

mishakor

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Заранее прошу прощения если я где то недоглядел подобную тему... ничего похожего не нашел
 
Вот простейший пример сортировки сложного масива

Код:
 
function compareAge(personA, personB) {
  return personA.age - personB.age;
}
var vasya = { name: "Вася", age: 23 };
var masha = { name: "Маша", age: 18 };
var vovochka = { name: "Вовочка", age: 6 };
var people = [ vasya , masha , vovochka ];
people.sort(compareAge);
 

Здесь всё просто, сортируем по возрасту (пример откопал где то в интернете)
 
У меня задача посложнее но принцип один и тот же.
 
В переменной хранится json строка (массив из нескольких элементов)
перевожу её в js массив и пытаюсь отсортировать, вот приблизительный пример

Код:
p1 = {"nomer454":{"gazeta":3,"nomer_id":5,"date":"2014-02-03 16:30:00"},"nomer455":{"gazeta":3,"nomer_id":6,"date":"2014-02-11 16:30:00"},"nomer453":{"gazeta":3,"nomer_id":4,"date":"2014-01-28 16:30:00"}};
p2 = eval("("+p1+")");
p2.sort(function(a,b){ return 0; });

На что фаербаг ругается

Цитата:
TypeError: f_gazeta_nomera.sort is not a function

 
Подскажите как решить эту проблему?

Всего записей: 65 | Зарегистр. 29-09-2008 | Отправлено: 11:57 27-01-2014 | Исправлено: mishakor, 12:02 27-01-2014
Cheery



.:МордератоР:.
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
mishakor

Цитата:
p2 = eval("("+p1+")");  

зачем?
 

Цитата:
На что фаербаг ругается  

и правильно, что ругается.. у вас все - один объект, а не массив объектов.
а у этого объекта нет функции .sort
 
хотите массив, то вам нужно преобразовать к виду
[
{"name": "nomer454", "gazeta":3,"nomer_id":5,"date":"2014-02-03 16:30:00"},
{"name": "nomer455", "gazeta":3,"nomer_id":6,"date":"2014-02-11 16:30:00"},
...
]
вот тогда у вас будет массив объектов, а у массива есть функция sort
можно, конечно, написать свой прототип "сортировки" атрибутов объекта, но там все не так просто и удобно.

----------
Away/DND

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 12:05 27-01-2014 | Исправлено: Cheery, 12:06 27-01-2014
mishakor

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
зачем?

к сожалению других вариантов незнаю
 
строку что я перевожу в массив получается следующим образом

Код:
p2 = [  
{"name": "nomer454", "gazeta":3,"nomer_id":5,"date":"2014-02-03 16:30:00"},  
{"name": "nomer455", "gazeta":3,"nomer_id":6,"date":"2014-02-11 16:30:00"},  
...  
];
p1 = JSON.stringify(p2)

 
таким способом получается строка

Цитата:
{"nomer454":{"gazeta":3,"nomer_id":5,"date":"2014-02-03 16:30:00"},"nomer455":{"gazeta":3,"nomer_id":6,"date":"2014-02-11 16:30:00"},"nomer453":{"gazeta":3,"nomer_id":4,"date":"2014-01-28 16:30:00"}}

 
эту же строку я в дальнейшем могу использовать в php
 
подскажите как правильно реализовать данную задумку

Всего записей: 65 | Зарегистр. 29-09-2008 | Отправлено: 12:35 27-01-2014
LordMicro



Junior Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
mishakor
У меня почему-то из кода:

Код:
p2 = [  
{"name": "nomer454", "gazeta":3,"nomer_id":5,"date":"2014-02-03 16:30:00"},  
{"name": "nomer455", "gazeta":3,"nomer_id":6,"date":"2014-02-11 16:30:00"}
];  
p1 = JSON.stringify(p2)

получается:

Код:
[{"name":"nomer454","gazeta":3,"nomer_id":5,"date":"2014-02-03 16:30:00"},{"name":"nomer455","gazeta":3,"nomer_id":6,"date":"2014-02-11 16:30:00"}]

 
а из этого сортировка так:

Код:
p1 = '[{"name":"nomer454","gazeta":3,"nomer_id":5,"date":"2014-02-03 16:30:00"},{"name":"nomer455","gazeta":3,"nomer_id":6,"date":"2014-02-11 16:30:00"}]';  
p2 = JSON.parse(p1);  
p2.sort(function(a,b){ return 0; });

и никаких ошибок

Всего записей: 141 | Зарегистр. 17-02-2006 | Отправлено: 17:38 27-01-2014
Cheery



.:МордератоР:.
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
mishakor

Цитата:
таким способом получается строка  

как уже сказали - не получается таким образом то, что вы показываете.
 

Цитата:
{"nomer454":{"gazeta":3,"nomer_id":5,"date":"2014-02-03 16:30:00"},"nomer455":{"gazeta":3,"nomer_id":6,"date":"2014-02-11 16:30:00"},"nomer453":{"gazeta":3,"nomer_id":4,"date":"2014-01-28 16:30:00"}}

эта строка - один объект. а у его атрибутов нет такого понятия, как порядок, поэтому и сортировать их нельзя.
запомните разницу в json - [] это массив, а {} - объект.
сортировать можно только элементы массива (даже если эти элементы являются объектами), атрибуты же объекта не сортируются, так как у них нет понятия очередности.

----------
Away/DND

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 04:15 28-01-2014
Открыть новую тему     Написать ответ в эту тему

Компьютерный форум Ru.Board » Интернет » Web-программирование » JS: сортировка


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru