03.08.2016, 10:35
|
|
Профессор
|
|
Регистрация: 04.10.2011
Сообщений: 357
|
|
Сортировка по внутреннему элементу
Вообщем суть такова, что получаю JSON c личными сообщениями, и загоняю их в переменную messages.
Получается в messages[0] есть свой id например 5.
Получается в messages[1] есть свой id например 10.
Все хорошо когда приходят первые данные, потом юзер решил догрузить сообщений, пришла еще пачка сообщений. Например часть новых, и часть старых
Так вот мне нужно отсортировать массив messages по внутреннему элементу id) Про sort знаю, может без написания есть какая-нибудь функция?
Или все таки прогонять весь массив сообщений, и сверять что есть на экране, а чего нет чтоб добавлять?) Я планировал дергать первый и последний ID) Мол если этот ID меньше значит староее сообщение добавляем к старым, если больше добавляем к новым) Опять же у них должен быть порядок, поэтому скорее всего сортировка)
__________________
Обеими руками за монополизацию браузерного бизнеса. Меньше браузеров, большего свободного времени у разработчиков.©KupueIIIKo
|
|
03.08.2016, 11:19
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,134
|
|
KupueIIIKo,
фильтрация нужна а не сортировка --- нужен обьект для id -- нет id в обьекте выводим сообщение, записываем id в обьект и всё
|
|
03.08.2016, 11:27
|
|
Профессор
|
|
Регистрация: 04.10.2011
Сообщений: 357
|
|
Сообщение от рони
|
KupueIIIKo,
фильтрация нужна а не сортировка --- нужен обьект для id -- нет id в обьекте выводим сообщение, записываем id в обьект и всё
|
Я Вас прявильно понял вы предлагаете сделать messages[ID] - объектом, внутри которого хранятся текст и прочие данные?
__________________
Обеими руками за монополизацию браузерного бизнеса. Меньше браузеров, большего свободного времени у разработчиков.©KupueIIIKo
|
|
03.08.2016, 11:46
|
Профессор
|
|
Регистрация: 08.07.2016
Сообщений: 1,332
|
|
Да тут понимать нечего, отправляй данные сразу в ассоциативном массиве, чтобы получить нормальный объект в скрипте, тогда сможешь все сливать и переливать без проблем. То есть не надо на клиенте разбирать барахло, надо сразу отгрузить нормально. Это если можешь переписать серверный скрипт. Если не можешь, втыкай в объект массивы, то есть да
messages = {};
/* потом */
messages[id] =
Тогда
if(id in messages)
или снова
messages[id] =
То есть у тебя будет "карта" с ключами. На js нет ассоциативных массивов, но все юзают объекты. Ключ может быть вообще любым, в том числе и таким messages['первое сообщение'],
|
|
03.08.2016, 11:47
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,134
|
|
Сообщение от KupueIIIKo
|
Я Вас прявильно понял
|
нет
var obj = {};
messages.forEach(function(mes) {
if(!obj[mes.id]){
show(mes);
obj[mes.id]=true
}
});
|
|
03.08.2016, 11:57
|
Профессор
|
|
Регистрация: 08.07.2016
Сообщений: 1,332
|
|
Все правильно он понял, это ты как обычно все понял по-своему. У него обновляемые данные, которые надо находить и мержить и удалять и перемещать и все такое. Без словаря тут застрелишься каждый раз искать и проверять.
Короче, ТС, пока не нарисовал чудовищное количество циклов, переделывай выдачу с сервера или на клиенте переделывай messages в объект.
|
|
03.08.2016, 12:01
|
Профессор
|
|
Регистрация: 08.07.2016
Сообщений: 1,332
|
|
То есть у тебя сейчас приходит массив с объектами или массивами, то загрузка такая
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];
Заметил разницу? Все очень просто.
|
|
03.08.2016, 12:03
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,134
|
|
warren buffet,
|
|
03.08.2016, 12:04
|
|
Профессор
|
|
Регистрация: 04.10.2011
Сообщений: 357
|
|
Сообщение от warren buffet
|
То есть у тебя сейчас приходит массив с объектами или массивами, то загрузка такая
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];
Заметил разницу? Все очень просто.
|
Я так и делаю) после .sort(compareNumeric) у меня все id-шники слетают
__________________
Обеими руками за монополизацию браузерного бизнеса. Меньше браузеров, большего свободного времени у разработчиков.©KupueIIIKo
|
|
03.08.2016, 12:06
|
|
Профессор
|
|
Регистрация: 04.10.2011
Сообщений: 357
|
|
Судя по всему без цикла проверки никак(((
__________________
Обеими руками за монополизацию браузерного бизнеса. Меньше браузеров, большего свободного времени у разработчиков.©KupueIIIKo
|
|
|
|