19.01.2018, 09:34
|
Кандидат Javascript-наук
|
|
Регистрация: 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.
|
|
19.01.2018, 09:38
|
|
CacheVar
|
|
Регистрация: 19.08.2010
Сообщений: 14,202
|
|
Сообщение от Cache
|
Требуется получить отсортированный массив или объект
|
Сортировать можно только массивы. У тебя их нет...
|
|
19.01.2018, 09:45
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,103
|
|
Cache,
содержимое обьектов не отсортировать, можно только массив, и проблем с этим нет, и где двоеточие?
Сообщение от Cache
|
сейчас вместо внешнего объекта использую массив и функцию sort в
|
это правильно, в чём проблема не понял.
|
|
19.01.2018, 09:53
|
Кандидат Javascript-наук
|
|
Регистрация: 02.05.2013
Сообщений: 111
|
|
Сообщение от рони
|
где двоеточие?
|
исправил
Сообщение от рони
|
это правильно, в чём проблема не понял.
|
проблема в том, что придется перегонять из объекта в массив для сортировки
|
|
19.01.2018, 09:57
|
Кандидат Javascript-наук
|
|
Регистрация: 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 невозможно на прямую, только получить из внутренней структуры
|
|
19.01.2018, 10:00
|
Кандидат Javascript-наук
|
|
Регистрация: 02.05.2013
Сообщений: 111
|
|
ksa,
сортировать нужно не сам объект, а получить к примеру 20 подъобъектов с максимальным (относительно всех подобъектов) значением v2, отсортированных в порядке убывания и не равных 0
Последний раз редактировалось Cache, 19.01.2018 в 10:04.
Причина: дополнение
|
|
19.01.2018, 10:00
|
|
CacheVar
|
|
Регистрация: 19.08.2010
Сообщений: 14,202
|
|
Сообщение от Cache
|
проблема в том, что придется перегонять из объекта в массив для сортировки
|
Не обязательно дублировать информацию. Достаточно сделать кагбэ индекс, если применить терминологию БД, вот его и сортировать.
Элементами массива будут ссылки на нужные экземпляры основного объекта...
|
|
19.01.2018, 10:01
|
|
CacheVar
|
|
Регистрация: 19.08.2010
Сообщений: 14,202
|
|
Сообщение от Cache
|
сейчас это выглядит так:
|
Это синтаксически не верная запись.
|
|
19.01.2018, 10:02
|
|
Тлен
|
|
Регистрация: 02.01.2010
Сообщений: 6,565
|
|
Сообщение от Cache
|
проблема в том, что придется перегонять из объекта в массив для сортировки
|
Значит придётся. В старых браузерах поядок значений в объекте не гарантирован вообще - т.е. как повезёт. В браузерах по-новей, что использовали первую версию нового стандарта - порядок значений выстраивается по мере их добавления в объект. В современных браузерах, использующих последнюю версию стандарта - в объекте идут сначала отсортированные по порядку числовые ключи, потом остальные по очерёдности добавления(имхо, контринтуитивная ересь). И не факт что снова что-то не поменяется.
__________________
29375, 35
|
|
19.01.2018, 10:02
|
|
CacheVar
|
|
Регистрация: 19.08.2010
Сообщений: 14,202
|
|
Сообщение от Cache
|
получить к примеру 20 подъобъектов с максимальным значением v2
|
Т.е. "сортировка" не является собственно задачей? Задача совсем в другом.
Тогда напиши что "дано" и что, таки нужно получить в итоге.
|
|
|
|