Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 03.08.2016, 10:35
Аватар для KupueIIIKo
Профессор
Отправить личное сообщение для KupueIIIKo Посмотреть профиль Найти все сообщения от KupueIIIKo
 
Регистрация: 04.10.2011
Сообщений: 357

Сортировка по внутреннему элементу
Вообщем суть такова, что получаю JSON c личными сообщениями, и загоняю их в переменную messages.
Получается в messages[0] есть свой id например 5.
Получается в messages[1] есть свой id например 10.
Все хорошо когда приходят первые данные, потом юзер решил догрузить сообщений, пришла еще пачка сообщений. Например часть новых, и часть старых

Так вот мне нужно отсортировать массив messages по внутреннему элементу id) Про sort знаю, может без написания есть какая-нибудь функция?

Или все таки прогонять весь массив сообщений, и сверять что есть на экране, а чего нет чтоб добавлять?) Я планировал дергать первый и последний ID) Мол если этот ID меньше значит староее сообщение добавляем к старым, если больше добавляем к новым) Опять же у них должен быть порядок, поэтому скорее всего сортировка)
__________________
Обеими руками за монополизацию браузерного бизнеса. Меньше браузеров, большего свободного времени у разработчиков.©KupueIIIKo
Ответить с цитированием
  #2 (permalink)  
Старый 03.08.2016, 11:19
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,134

KupueIIIKo,
фильтрация нужна а не сортировка --- нужен обьект для id -- нет id в обьекте выводим сообщение, записываем id в обьект и всё
Ответить с цитированием
  #3 (permalink)  
Старый 03.08.2016, 11:27
Аватар для KupueIIIKo
Профессор
Отправить личное сообщение для KupueIIIKo Посмотреть профиль Найти все сообщения от KupueIIIKo
 
Регистрация: 04.10.2011
Сообщений: 357

Сообщение от рони Посмотреть сообщение
KupueIIIKo,
фильтрация нужна а не сортировка --- нужен обьект для id -- нет id в обьекте выводим сообщение, записываем id в обьект и всё
Я Вас прявильно понял вы предлагаете сделать messages[ID] - объектом, внутри которого хранятся текст и прочие данные?
__________________
Обеими руками за монополизацию браузерного бизнеса. Меньше браузеров, большего свободного времени у разработчиков.©KupueIIIKo
Ответить с цитированием
  #4 (permalink)  
Старый 03.08.2016, 11:46
Профессор
Отправить личное сообщение для warren buffet Посмотреть профиль Найти все сообщения от warren buffet
 
Регистрация: 08.07.2016
Сообщений: 1,332

Да тут понимать нечего, отправляй данные сразу в ассоциативном массиве, чтобы получить нормальный объект в скрипте, тогда сможешь все сливать и переливать без проблем. То есть не надо на клиенте разбирать барахло, надо сразу отгрузить нормально. Это если можешь переписать серверный скрипт. Если не можешь, втыкай в объект массивы, то есть да

messages = {};
/* потом */
messages[id] =

Тогда

if(id in messages)


или снова

messages[id] =

То есть у тебя будет "карта" с ключами. На js нет ассоциативных массивов, но все юзают объекты. Ключ может быть вообще любым, в том числе и таким messages['первое сообщение'],
Ответить с цитированием
  #5 (permalink)  
Старый 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
      }
});
Ответить с цитированием
  #6 (permalink)  
Старый 03.08.2016, 11:57
Профессор
Отправить личное сообщение для warren buffet Посмотреть профиль Найти все сообщения от warren buffet
 
Регистрация: 08.07.2016
Сообщений: 1,332

Сообщение от рони
нет
Все правильно он понял, это ты как обычно все понял по-своему. У него обновляемые данные, которые надо находить и мержить и удалять и перемещать и все такое. Без словаря тут застрелишься каждый раз искать и проверять.

Короче, ТС, пока не нарисовал чудовищное количество циклов, переделывай выдачу с сервера или на клиенте переделывай messages в объект.
Ответить с цитированием
  #7 (permalink)  
Старый 03.08.2016, 12:01
Профессор
Отправить личное сообщение для warren buffet Посмотреть профиль Найти все сообщения от warren buffet
 
Регистрация: 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];


Заметил разницу? Все очень просто.
Ответить с цитированием
  #8 (permalink)  
Старый 03.08.2016, 12:03
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,134

warren buffet,
Ответить с цитированием
  #9 (permalink)  
Старый 03.08.2016, 12:04
Аватар для KupueIIIKo
Профессор
Отправить личное сообщение для KupueIIIKo Посмотреть профиль Найти все сообщения от KupueIIIKo
 
Регистрация: 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
Ответить с цитированием
  #10 (permalink)  
Старый 03.08.2016, 12:06
Аватар для KupueIIIKo
Профессор
Отправить личное сообщение для KupueIIIKo Посмотреть профиль Найти все сообщения от KupueIIIKo
 
Регистрация: 04.10.2011
Сообщений: 357

Судя по всему без цикла проверки никак(((
__________________
Обеими руками за монополизацию браузерного бизнеса. Меньше браузеров, большего свободного времени у разработчиков.©KupueIIIKo
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сanvas изображения подключить к элементу выбора файла mnbcz Элементы интерфейса 0 14.07.2016 17:38
Плавный переход к элементу по внешней ссылке deniskutovskiy jQuery 13 16.10.2015 22:30
Добавление класса элементу при прокрутке к этому элементу patriot94 Общие вопросы Javascript 5 18.03.2014 12:41
Как добраться через jquery к элементу? literator Events/DOM/Window 3 25.12.2013 21:45
Как прокрутить переполненный div к внутреннему элементу? Serg_pnz jQuery 0 16.05.2011 17:52