Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 19.01.2018, 09:34
Кандидат Javascript-наук
Отправить личное сообщение для Cache Посмотреть профиль Найти все сообщения от Cache
 
Регистрация: 02.05.2013
Сообщений: 111

сортировка значений в объекте
Здравствуйте.
Есть объект, содержащий n-ное количество идентичных по структуре объектов
Требуется получить отсортированный массив или объект в зависимости от одного из значений внутренних значений
например
obj={
	123={
		v1:5,
		v2:4,
		v3:0,
		id:123
	},
	456={
		v1:0,
		v2:3,
		v3:5,
		id:456
	},
	321={
		v1:2,
		v2:0,
		v3:7,
		id:321
	}
}

как получить отсортированный результат к примеру по убыванию параметра v2
сейчас вместо внешнего объекта использую массив и функцию sort в которую с помощью функции передаю значение того или иного ключа внутреннего объекта, но это не удобно т.к. найти нужный объект по его id невозможно, ибо ключи цифрового массива не содержат нужного идентификатора

Последний раз редактировалось Cache, 19.01.2018 в 09:51.
Ответить с цитированием
  #2 (permalink)  
Старый 19.01.2018, 09:38
Аватар для ksa
ksa ksa на форуме
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,228

Сообщение от Cache
Требуется получить отсортированный массив или объект
Сортировать можно только массивы. У тебя их нет...
Ответить с цитированием
  #3 (permalink)  
Старый 19.01.2018, 09:45
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,126

Cache,
содержимое обьектов не отсортировать, можно только массив, и проблем с этим нет, и где двоеточие?
Сообщение от Cache
сейчас вместо внешнего объекта использую массив и функцию sort в
это правильно, в чём проблема не понял.
Ответить с цитированием
  #4 (permalink)  
Старый 19.01.2018, 09:53
Кандидат Javascript-наук
Отправить личное сообщение для Cache Посмотреть профиль Найти все сообщения от Cache
 
Регистрация: 02.05.2013
Сообщений: 111

Сообщение от рони Посмотреть сообщение
где двоеточие?
исправил
Сообщение от рони Посмотреть сообщение
это правильно, в чём проблема не понял.
проблема в том, что придется перегонять из объекта в массив для сортировки
Ответить с цитированием
  #5 (permalink)  
Старый 19.01.2018, 09:57
Кандидат Javascript-наук
Отправить личное сообщение для Cache Посмотреть профиль Найти все сообщения от Cache
 
Регистрация: 02.05.2013
Сообщений: 111

сейчас это выглядит так:
arr=[
	0={
		v1:5,
		v2:4,
		v3:0,
		id:123
	},
	1={
		v1:0,
		v2:3,
		v3:5,
		id:456
	},
	2={
		v1:2,
		v2:0,
		v3:7,
		id:321
	}
]

т.е. обратиться к внутреннему объекту по его id невозможно на прямую, только получить из внутренней структуры
Ответить с цитированием
  #6 (permalink)  
Старый 19.01.2018, 10:00
Кандидат Javascript-наук
Отправить личное сообщение для Cache Посмотреть профиль Найти все сообщения от Cache
 
Регистрация: 02.05.2013
Сообщений: 111

ksa,
сортировать нужно не сам объект, а получить к примеру 20 подъобъектов с максимальным (относительно всех подобъектов) значением v2, отсортированных в порядке убывания и не равных 0

Последний раз редактировалось Cache, 19.01.2018 в 10:04. Причина: дополнение
Ответить с цитированием
  #7 (permalink)  
Старый 19.01.2018, 10:00
Аватар для ksa
ksa ksa на форуме
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,228

Сообщение от Cache
проблема в том, что придется перегонять из объекта в массив для сортировки
Не обязательно дублировать информацию. Достаточно сделать кагбэ индекс, если применить терминологию БД, вот его и сортировать.
Элементами массива будут ссылки на нужные экземпляры основного объекта...
Ответить с цитированием
  #8 (permalink)  
Старый 19.01.2018, 10:01
Аватар для ksa
ksa ksa на форуме
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,228

Сообщение от Cache
сейчас это выглядит так:
Это синтаксически не верная запись.
Ответить с цитированием
  #9 (permalink)  
Старый 19.01.2018, 10:02
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,590

Сообщение от Cache Посмотреть сообщение
проблема в том, что придется перегонять из объекта в массив для сортировки
Значит придётся. В старых браузерах поядок значений в объекте не гарантирован вообще - т.е. как повезёт. В браузерах по-новей, что использовали первую версию нового стандарта - порядок значений выстраивается по мере их добавления в объект. В современных браузерах, использующих последнюю версию стандарта - в объекте идут сначала отсортированные по порядку числовые ключи, потом остальные по очерёдности добавления(имхо, контринтуитивная ересь). И не факт что снова что-то не поменяется.
__________________
29375, 35
Ответить с цитированием
  #10 (permalink)  
Старый 19.01.2018, 10:02
Аватар для ksa
ksa ksa на форуме
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,228

Сообщение от Cache
получить к примеру 20 подъобъектов с максимальным значением v2
Т.е. "сортировка" не является собственно задачей? Задача совсем в другом.

Тогда напиши что "дано" и что, таки нужно получить в итоге.
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Подключение случайных значений Nyam Общие вопросы Javascript 13 26.04.2014 20:46
Динамический объект в объекте Аарон Общие вопросы Javascript 11 27.03.2014 00:00
Суммирование значений по всем динамически добавленным полям Joliat Общие вопросы Javascript 2 12.02.2014 16:01
Говнокод)) Сортировка пузырьком. Lorines Ваши сайты и скрипты 3 03.10.2013 01:23
Переодическое обновление значений для графика, функция для обновления значений yupa87 Общие вопросы Javascript 0 09.07.2009 14:48