Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   сортировка значений в объекте (https://javascript.ru/forum/misc/72279-sortirovka-znachenijj-v-obekte.html)

Cache 19.01.2018 09:34

сортировка значений в объекте
 
Здравствуйте.
Есть объект, содержащий 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 невозможно, ибо ключи цифрового массива не содержат нужного идентификатора

ksa 19.01.2018 09:38

Цитата:

Сообщение от Cache
Требуется получить отсортированный массив или объект

Сортировать можно только массивы. У тебя их нет... :no:

рони 19.01.2018 09:45

Cache,
содержимое обьектов не отсортировать, можно только массив, и проблем с этим нет, и где двоеточие?
Цитата:

Сообщение от Cache
сейчас вместо внешнего объекта использую массив и функцию sort в

это правильно, в чём проблема не понял.

Cache 19.01.2018 09:53

Цитата:

Сообщение от рони (Сообщение 475699)
где двоеточие?

исправил
Цитата:

Сообщение от рони (Сообщение 475699)
это правильно, в чём проблема не понял.

проблема в том, что придется перегонять из объекта в массив для сортировки

Cache 19.01.2018 09:57

сейчас это выглядит так:
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 невозможно на прямую, только получить из внутренней структуры

Cache 19.01.2018 10:00

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

ksa 19.01.2018 10:00

Цитата:

Сообщение от Cache
проблема в том, что придется перегонять из объекта в массив для сортировки

Не обязательно дублировать информацию. Достаточно сделать кагбэ индекс, если применить терминологию БД, вот его и сортировать.
Элементами массива будут ссылки на нужные экземпляры основного объекта...

ksa 19.01.2018 10:01

Цитата:

Сообщение от Cache
сейчас это выглядит так:

Это синтаксически не верная запись. :no:

Aetae 19.01.2018 10:02

Цитата:

Сообщение от Cache (Сообщение 475703)
проблема в том, что придется перегонять из объекта в массив для сортировки

Значит придётся. В старых браузерах поядок значений в объекте не гарантирован вообще - т.е. как повезёт. В браузерах по-новей, что использовали первую версию нового стандарта - порядок значений выстраивается по мере их добавления в объект. В современных браузерах, использующих последнюю версию стандарта - в объекте идут сначала отсортированные по порядку числовые ключи, потом остальные по очерёдности добавления(имхо, контринтуитивная ересь). И не факт что снова что-то не поменяется.

ksa 19.01.2018 10:02

Цитата:

Сообщение от Cache
получить к примеру 20 подъобъектов с максимальным значением v2

Т.е. "сортировка" не является собственно задачей? Задача совсем в другом.

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


Часовой пояс GMT +3, время: 19:54.