Сортировка по внутреннему элементу
Вообщем суть такова, что получаю JSON c личными сообщениями, и загоняю их в переменную messages.
Получается в messages[0] есть свой id например 5. Получается в messages[1] есть свой id например 10. Все хорошо когда приходят первые данные, потом юзер решил догрузить сообщений, пришла еще пачка сообщений. Например часть новых, и часть старых Так вот мне нужно отсортировать массив messages по внутреннему элементу id) Про sort знаю, может без написания есть какая-нибудь функция? Или все таки прогонять весь массив сообщений, и сверять что есть на экране, а чего нет чтоб добавлять?) Я планировал дергать первый и последний ID) Мол если этот ID меньше значит староее сообщение добавляем к старым, если больше добавляем к новым) Опять же у них должен быть порядок, поэтому скорее всего сортировка) |
KupueIIIKo,
фильтрация нужна а не сортировка --- нужен обьект для id -- нет id в обьекте выводим сообщение, записываем id в обьект и всё |
Цитата:
|
Да тут понимать нечего, отправляй данные сразу в ассоциативном массиве, чтобы получить нормальный объект в скрипте, тогда сможешь все сливать и переливать без проблем. То есть не надо на клиенте разбирать барахло, надо сразу отгрузить нормально. Это если можешь переписать серверный скрипт. Если не можешь, втыкай в объект массивы, то есть да
messages = {}; /* потом */ messages[id] = Тогда if(id in messages) или снова messages[id] = То есть у тебя будет "карта" с ключами. На js нет ассоциативных массивов, но все юзают объекты. Ключ может быть вообще любым, в том числе и таким messages['первое сообщение'], |
Цитата:
var obj = {}; messages.forEach(function(mes) { if(!obj[mes.id]){ show(mes); obj[mes.id]=true } }); |
Цитата:
Короче, ТС, пока не нарисовал чудовищное количество циклов, переделывай выдачу с сервера или на клиенте переделывай messages в объект. |
То есть у тебя сейчас приходит массив с объектами или массивами, то загрузка такая
var messages = {}; for(var i=0; i<json.length;i++) messages[json[i].id]=json[i]; А теперь смотри как будет выглядеть обновление for(var i=0; i<json.length;i++) messages[json[i].id]=json[i]; Заметил разницу? Все очень просто. |
warren buffet,
![]() |
Цитата:
|
Судя по всему без цикла проверки никак(((
|
Часовой пояс GMT +3, время: 07:17. |