сортировка значений в объекте
Здравствуйте.
Есть объект, содержащий 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,
содержимое обьектов не отсортировать, можно только массив, и проблем с этим нет, и где двоеточие? Цитата:
|
Цитата:
Цитата:
|
сейчас это выглядит так:
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 невозможно на прямую, только получить из внутренней структуры |
ksa,
сортировать нужно не сам объект, а получить к примеру 20 подъобъектов с максимальным (относительно всех подобъектов) значением v2, отсортированных в порядке убывания и не равных 0 |
Цитата:
Элементами массива будут ссылки на нужные экземпляры основного объекта... |
Цитата:
|
Цитата:
|
Цитата:
Тогда напиши что "дано" и что, таки нужно получить в итоге. |
Цитата:
при этом иметь возможность получить какое-то количество (заданное как константа), например 20, подобъектов с условием что определенное значение у них, например параметр v2, больше чем у остальных (т.е. теоретически это сортировка по убыванию по параметру v2 и взятие первых 20 объектов (по сути нужен их id)) |
Цитата:
|
Cache,
сделайте ваш обьект для примера, ключей на 10 |
Цитата:
arr=[ { v1:5, v2:4, v3:0, id:123 },{ v1:0, v2:3, v3:5, id:456 },{ v1:2, v2:0, v3:7, id:321 } //, ... ]; var result = arr.sort(function(a, b){ return b.v2 - a.v2 }).slice(0, 20) |
Aetae, :)
.map(function(a) { return a.id; }) |
Aetae,
у меня уже есть такая функция для массива, я же говорю про объект, когда изначально будет объект а не массив, можно ли получить такие данные |
только у меня она несколько сложнее, с учетом того что сортировка нужна не только по v2 но и по v1 и по v3 и т.д.
|
Цитата:
т.е. в любом случае, на сколько я понял, преобразовывать в массив? поиск по объекту с такими условиями не возможен? |
Цитата:
Цитата:
|
Цитата:
|
Цитата:
arr=[{"id":31061,"v1":21,"v2":3,"v3":25,"v4":337,"v5":70,"v6":0,"v7":0,"v8":0,"v9":8,"v10":17,"v11":70,"v12":0,"v13":0,"v14":0,"v15":0,"v16":0},{"id":4659,"v1":14,"v2":2,"v3":397,"v4":473,"v5":58,"v6":0,"v7":0,"v8":0,"v9":0,"v10":0,"v11":0,"v12":58,"v13":0,"v14":0,"v15":0,"v16":0},{"id":34501,"v1":12,"v2":2,"v3":122,"v4":401,"v5":54,"v6":0,"v7":0,"v8":0,"v9":0,"v10":0,"v11":30,"v12":24,"v13":0,"v14":0,"v15":0,"v16":0},{"id":33700,"v1":23,"v2":3,"v3":31,"v4":332,"v5":52,"v6":0,"v7":0,"v8":0,"v9":0,"v10":45,"v11":27,"v12":24,"v13":10,"v14":0,"v15":0,"v16":0},{"id":33465,"v1":11,"v2":2,"v3":340,"v4":416,"v5":47,"v6":0,"v7":0,"v8":0,"v9":0,"v10":0,"v11":47,"v12":0,"v13":0,"v14":0,"v15":0,"v16":0},{"id":35485,"v1":10,"v2":2,"v3":97,"v4":516,"v5":47,"v6":0,"v7":0,"v8":0,"v9":0,"v10":0,"v11":37,"v12":10,"v13":0,"v14":0,"v15":0,"v16":0},{"id":4420,"v1":22,"v2":3,"v3":25,"v4":319,"v5":45,"v6":3.75,"v7":18,"v8":0,"v9":10,"v10":0,"v11":45,"v12":0,"v13":0,"v14":15,"v15":0,"v16":0},{"id":2624,"v1":20,"v2":3,"v3":25,"v4":304,"v5":44,"v6":0,"v7":0,"v8":0,"v9":0,"v10":6,"v11":21,"v12":23,"v13":0,"v14":0,"v15":0,"v16":0},{"id":3888,"v1":10,"v2":2,"v3":370,"v4":446,"v5":41,"v6":0,"v7":0,"v8":0,"v9":0,"v10":0,"v11":41,"v12":0,"v13":0,"v14":0,"v15":0,"v16":0},{"id":31505,"v1":8,"v2":2,"v3":103,"v4":516,"v5":41,"v6":0,"v7":0,"v8":0,"v9":0,"v10":0,"v11":16,"v12":25,"v13":0,"v14":0,"v15":0,"v16":0},{"id":9148,"v1":27,"v2":3,"v3":99,"v4":286,"v5":39.3,"v6":3.75,"v7":0,"v8":0,"v9":0,"v10":0,"v11":15,"v12":18,"v13":63,"v14":15,"v15":0,"v16":0},{"id":8814,"v1":13,"v2":2,"v3":77,"v4":461,"v5":38.2,"v6":0,"v7":0,"v8":0,"v9":0,"v10":0,"v11":0,"v12":36,"v13":22,"v14":0,"v15":0,"v16":0},{"id":9863,"v1":7,"v2":2,"v3":111,"v4":461,"v5":36,"v6":0,"v7":0,"v8":0,"v9":0,"v10":0,"v11":31,"v12":5,"v13":0,"v14":0,"v15":0,"v16":0},{"id":11403,"v1":8,"v2":2,"v3":39,"v4":374,"v5":36,"v6":0,"v7":0,"v8":0,"v9":0,"v10":0,"v11":0,"v12":36,"v13":0,"v14":0,"v15":0,"v16":0},{"id":33283,"v1":11,"v2":2,"v3":8,"v4":434,"v5":32.2,"v6":0,"v7":0,"v8":0,"v9":0,"v10":0,"v11":0,"v12":30,"v13":22,"v14":0,"v15":0,"v16":0},{"id":2654,"v1":23,"v2":3,"v3":58,"v4":281,"v5":31,"v6":16.5,"v7":0,"v8":0,"v9":0,"v10":12,"v11":12,"v12":15,"v13":40,"v14":0,"v15":33,"v16":0},{"id":5697,"v1":11,"v2":2,"v3":35,"v4":445,"v5":30,"v6":0,"v7":0,"v8":0,"v9":18,"v10":0,"v11":30,"v12":0,"v13":0,"v14":0,"v15":0,"v16":0},{"id":10291,"v1":8,"v2":2,"v3":89,"v4":507,"v5":30,"v6":5,"v7":0,"v8":0,"v9":0,"v10":0,"v11":30,"v12":0,"v13":0,"v14":0,"v15":10,"v16":0},{"id":36762,"v1":10,"v2":2,"v3":191,"v4":539,"v5":30,"v6":12,"v7":0,"v8":0,"v9":0,"v10":0,"v11":30,"v12":0,"v13":0,"v14":0,"v15":0,"v16":12},{"id":2205,"v1":13,"v2":2,"v3":172,"v4":375,"v5":27.6,"v6":0,"v7":0,"v8":0,"v9":0,"v10":0,"v11":0,"v12":24,"v13":36,"v14":0,"v15":0,"v16":0},{"id":2521,"v1":11,"v2":2,"v3":173,"v4":437,"v5":27.4,"v6":0,"v7":0,"v8":0,"v9":0,"v10":0,"v11":0,"v12":25,"v13":24,"v14":0,"v15":0,"v16":0},{"id":6023,"v1":12,"v2":2,"v3":120,"v4":355,"v5":27,"v6":0,"v7":0,"v8":0,"v9":0,"v10":0,"v11":24,"v12":0,"v13":30,"v14":0,"v15":0,"v16":0},{"id":31237,"v1":10,"v2":2,"v3":167,"v4":387,"v5":25,"v6":20,"v7":0,"v8":0,"v9":0,"v10":0,"v11":0,"v12":25,"v13":0,"v14":0,"v15":0,"v16":20},{"id":32598,"v1":10,"v2":2,"v3":70,"v4":366,"v5":25,"v6":5.5,"v7":0,"v8":0,"v9":0,"v10":0,"v11":25,"v12":0,"v13":0,"v14":22,"v15":0,"v16":0},{"id":37239,"v1":7,"v2":2,"v3":198,"v4":471,"v5":25,"v6":2.5,"v7":0,"v8":0,"v9":0,"v10":0,"v11":0,"v12":25,"v13":0,"v14":10,"v15":0,"v16":0},{"id":9003,"v1":10,"v2":2,"v3":143,"v4":390,"v5":24,"v6":0,"v7":20,"v8":0,"v9":0,"v10":0,"v11":24,"v12":0,"v13":0,"v14":0,"v15":0,"v16":0},{"id":37116,"v1":13,"v2":2,"v3":120,"v4":408,"v5":24,"v6":0,"v7":0,"v8":0,"v9":30,"v10":0,"v11":24,"v12":0,"v13":0,"v14":0,"v15":0,"v16":0},{"id":4939,"v1":13,"v2":2,"v3":79,"v4":354,"v5":22,"v6":0,"v7":0,"v8":0,"v9":0,"v10":36,"v11":22,"v12":0,"v13":0,"v14":0,"v15":0,"v16":0},{"id":9838,"v1":11,"v2":2,"v3":37,"v4":509,"v5":22,"v6":30,"v7":0,"v8":0,"v9":0,"v10":0,"v11":0,"v12":22,"v13":0,"v14":0,"v15":0,"v16":30},{"id":30922,"v1":8,"v2":2,"v3":177,"v4":518,"v5":22,"v6":0,"v7":20,"v8":0,"v9":0,"v10":0,"v11":12,"v12":10,"v13":0,"v14":0,"v15":0,"v16":0},{"id":35830,"v1":11,"v2":2,"v3":222,"v4":461,"v5":22,"v6":0,"v7":0,"v8":25,"v9":0,"v10":0,"v11":0,"v12":22,"v13":0,"v14":0,"v15":0,"v16":0},{"id":35852,"v1":4,"v2":1,"v3":65,"v4":651,"v5":18,"v6":0,"v7":0,"v8":0,"v9":0,"v10":0,"v11":18,"v12":0,"v13":0,"v14":0,"v15":0,"v16":0},{"id":36298,"v1":4,"v2":1,"v3":127,"v4":700,"v5":18,"v6":0,"v7":0,"v8":0,"v9":0,"v10":0,"v11":18,"v12":0,"v13":0,"v14":0,"v15":0,"v16":0},{"id":36578,"v1":4,"v2":1,"v3":87,"v4":506,"v5":18,"v6":0,"v7":0,"v8":0,"v9":0,"v10":0,"v11":18,"v12":0,"v13":0,"v14":0,"v15":0,"v16":0},{"id":36697,"v1":4,"v2":1,"v3":405,"v4":660,"v5":18,"v6":0,"v7":0,"v8":0,"v9":0,"v10":0,"v11":18,"v12":0,"v13":0,"v14":0,"v15":0,"v16":0},{"id":7970,"v1":9,"v2":2,"v3":36,"v4":462,"v5":18,"v6":0,"v7":0,"v8":25,"v9":0,"v10":0,"v11":6,"v12":12,"v13":0,"v14":0,"v15":0,"v16":0}}] сорри, спойлера не нашел |
Цитата:
например так: obj[id] |
arr=[{"id":31061,"v1":21,"v2":3,"v3":25,"v4":337,"v5":70,"v6":0,"v7":0,"v8":0,"v9":8,"v10":17,"v11":70,"v12":0,"v13":0,"v14":0,"v15":0,"v16":0},{"id":4659,"v1":14,"v2":2,"v3":397,"v4":473,"v5":58,"v6":0,"v7":0,"v8":0,"v9":0,"v10":0,"v11":0,"v12":58,"v13":0,"v14":0,"v15":0,"v16":0},{"id":34501,"v1":12,"v2":2,"v3":122,"v4":401,"v5":54,"v6":0,"v7":0,"v8":0,"v9":0,"v10":0,"v11":30,"v12":24,"v13":0,"v14":0,"v15":0,"v16":0},{"id":33700,"v1":23,"v2":3,"v3":31,"v4":332,"v5":52,"v6":0,"v7":0,"v8":0,"v9":0,"v10":45,"v11":27,"v12":24,"v13":10,"v14":0,"v15":0,"v16":0},{"id":33465,"v1":11,"v2":2,"v3":340,"v4":416,"v5":47,"v6":0,"v7":0,"v8":0,"v9":0,"v10":0,"v11":47,"v12":0,"v13":0,"v14":0,"v15":0,"v16":0},{"id":35485,"v1":10,"v2":2,"v3":97,"v4":516,"v5":47,"v6":0,"v7":0,"v8":0,"v9":0,"v10":0,"v11":37,"v12":10,"v13":0,"v14":0,"v15":0,"v16":0},{"id":4420,"v1":22,"v2":3,"v3":25,"v4":319,"v5":45,"v6":3.75,"v7":18,"v8":0,"v9":10,"v10":0,"v11":45,"v12":0,"v13":0,"v14":15,"v15":0,"v16":0},{"id":2624,"v1":20,"v2":3,"v3":25,"v4":304,"v5":44,"v6":0,"v7":0,"v8":0,"v9":0,"v10":6,"v11":21,"v12":23,"v13":0,"v14":0,"v15":0,"v16":0},{"id":3888,"v1":10,"v2":2,"v3":370,"v4":446,"v5":41,"v6":0,"v7":0,"v8":0,"v9":0,"v10":0,"v11":41,"v12":0,"v13":0,"v14":0,"v15":0,"v16":0},{"id":31505,"v1":8,"v2":2,"v3":103,"v4":516,"v5":41,"v6":0,"v7":0,"v8":0,"v9":0,"v10":0,"v11":16,"v12":25,"v13":0,"v14":0,"v15":0,"v16":0},{"id":9148,"v1":27,"v2":3,"v3":99,"v4":286,"v5":39.3,"v6":3.75,"v7":0,"v8":0,"v9":0,"v10":0,"v11":15,"v12":18,"v13":63,"v14":15,"v15":0,"v16":0},{"id":8814,"v1":13,"v2":2,"v3":77,"v4":461,"v5":38.2,"v6":0,"v7":0,"v8":0,"v9":0,"v10":0,"v11":0,"v12":36,"v13":22,"v14":0,"v15":0,"v16":0},{"id":9863,"v1":7,"v2":2,"v3":111,"v4":461,"v5":36,"v6":0,"v7":0,"v8":0,"v9":0,"v10":0,"v11":31,"v12":5,"v13":0,"v14":0,"v15":0,"v16":0},{"id":11403,"v1":8,"v2":2,"v3":39,"v4":374,"v5":36,"v6":0,"v7":0,"v8":0,"v9":0,"v10":0,"v11":0,"v12":36,"v13":0,"v14":0,"v15":0,"v16":0},{"id":33283,"v1":11,"v2":2,"v3":8,"v4":434,"v5":32.2,"v6":0,"v7":0,"v8":0,"v9":0,"v10":0,"v11":0,"v12":30,"v13":22,"v14":0,"v15":0,"v16":0},{"id":2654,"v1":23,"v2":3,"v3":58,"v4":281,"v5":31,"v6":16.5,"v7":0,"v8":0,"v9":0,"v10":12,"v11":12,"v12":15,"v13":40,"v14":0,"v15":33,"v16":0},{"id":5697,"v1":11,"v2":2,"v3":35,"v4":445,"v5":30,"v6":0,"v7":0,"v8":0,"v9":18,"v10":0,"v11":30,"v12":0,"v13":0,"v14":0,"v15":0,"v16":0},{"id":10291,"v1":8,"v2":2,"v3":89,"v4":507,"v5":30,"v6":5,"v7":0,"v8":0,"v9":0,"v10":0,"v11":30,"v12":0,"v13":0,"v14":0,"v15":10,"v16":0},{"id":36762,"v1":10,"v2":2,"v3":191,"v4":539,"v5":30,"v6":12,"v7":0,"v8":0,"v9":0,"v10":0,"v11":30,"v12":0,"v13":0,"v14":0,"v15":0,"v16":12},{"id":2205,"v1":13,"v2":2,"v3":172,"v4":375,"v5":27.6,"v6":0,"v7":0,"v8":0,"v9":0,"v10":0,"v11":0,"v12":24,"v13":36,"v14":0,"v15":0,"v16":0},{"id":2521,"v1":11,"v2":2,"v3":173,"v4":437,"v5":27.4,"v6":0,"v7":0,"v8":0,"v9":0,"v10":0,"v11":0,"v12":25,"v13":24,"v14":0,"v15":0,"v16":0},{"id":6023,"v1":12,"v2":2,"v3":120,"v4":355,"v5":27,"v6":0,"v7":0,"v8":0,"v9":0,"v10":0,"v11":24,"v12":0,"v13":30,"v14":0,"v15":0,"v16":0},{"id":31237,"v1":10,"v2":2,"v3":167,"v4":387,"v5":25,"v6":20,"v7":0,"v8":0,"v9":0,"v10":0,"v11":0,"v12":25,"v13":0,"v14":0,"v15":0,"v16":20},{"id":32598,"v1":10,"v2":2,"v3":70,"v4":366,"v5":25,"v6":5.5,"v7":0,"v8":0,"v9":0,"v10":0,"v11":25,"v12":0,"v13":0,"v14":22,"v15":0,"v16":0},{"id":37239,"v1":7,"v2":2,"v3":198,"v4":471,"v5":25,"v6":2.5,"v7":0,"v8":0,"v9":0,"v10":0,"v11":0,"v12":25,"v13":0,"v14":10,"v15":0,"v16":0},{"id":9003,"v1":10,"v2":2,"v3":143,"v4":390,"v5":24,"v6":0,"v7":20,"v8":0,"v9":0,"v10":0,"v11":24,"v12":0,"v13":0,"v14":0,"v15":0,"v16":0},{"id":37116,"v1":13,"v2":2,"v3":120,"v4":408,"v5":24,"v6":0,"v7":0,"v8":0,"v9":30,"v10":0,"v11":24,"v12":0,"v13":0,"v14":0,"v15":0,"v16":0},{"id":4939,"v1":13,"v2":2,"v3":79,"v4":354,"v5":22,"v6":0,"v7":0,"v8":0,"v9":0,"v10":36,"v11":22,"v12":0,"v13":0,"v14":0,"v15":0,"v16":0},{"id":9838,"v1":11,"v2":2,"v3":37,"v4":509,"v5":22,"v6":30,"v7":0,"v8":0,"v9":0,"v10":0,"v11":0,"v12":22,"v13":0,"v14":0,"v15":0,"v16":30},{"id":30922,"v1":8,"v2":2,"v3":177,"v4":518,"v5":22,"v6":0,"v7":20,"v8":0,"v9":0,"v10":0,"v11":12,"v12":10,"v13":0,"v14":0,"v15":0,"v16":0},{"id":35830,"v1":11,"v2":2,"v3":222,"v4":461,"v5":22,"v6":0,"v7":0,"v8":25,"v9":0,"v10":0,"v11":0,"v12":22,"v13":0,"v14":0,"v15":0,"v16":0},{"id":35852,"v1":4,"v2":1,"v3":65,"v4":651,"v5":18,"v6":0,"v7":0,"v8":0,"v9":0,"v10":0,"v11":18,"v12":0,"v13":0,"v14":0,"v15":0,"v16":0},{"id":36298,"v1":4,"v2":1,"v3":127,"v4":700,"v5":18,"v6":0,"v7":0,"v8":0,"v9":0,"v10":0,"v11":18,"v12":0,"v13":0,"v14":0,"v15":0,"v16":0},{"id":36578,"v1":4,"v2":1,"v3":87,"v4":506,"v5":18,"v6":0,"v7":0,"v8":0,"v9":0,"v10":0,"v11":18,"v12":0,"v13":0,"v14":0,"v15":0,"v16":0},{"id":36697,"v1":4,"v2":1,"v3":405,"v4":660,"v5":18,"v6":0,"v7":0,"v8":0,"v9":0,"v10":0,"v11":18,"v12":0,"v13":0,"v14":0,"v15":0,"v16":0},{"id":7970,"v1":9,"v2":2,"v3":36,"v4":462,"v5":18,"v6":0,"v7":0,"v8":25,"v9":0,"v10":0,"v11":6,"v12":12,"v13":0,"v14":0,"v15":0,"v16":0}]; var result = arr .sort(function(a, b){ return b.v2 - a.v2 }) //сортируем по убыванию v2 .slice(0, 20) //отрезаем верхние 20 .reduce(function(a, b) { return a[b.id] = b, a; }, {}); //набиваем новый объект, где ключами - id alert(JSON.stringify(result,0,'\t'));Как видно, независимо от добавления порядок ключей в новом объекте отсортирован по возрастанию и с этим ничего не сделать ибо стандарт. Так что либо удобное обращение по result[id] либо нужный порядок пр итерации. |
Цитата:
но при этом не иметь геммороя с получением отсортированных данных, не гоняя весь объект через преобразование в массив и потом сортировку |
Aetae,
я еще раз повторяю, у меня есть функция сортировки этого массива мне не надо сортировать ЭТОТ массив, что вы уже второй раз пытаетесь сделать, я хочу преобразовать его в объект (пример в первом посте) но при этом иметь возможность получить из него нужные отсортированные данные |
я пас ...
|
Aetae,
вот объект который я хочу иметь в итоге: obj={ 31061:{"id":31061,"v1":21,"v2":3,"v3":25,"v4":337,"v5":70,"v6":0,"v7":0,"v8":0,"v9":8,"v10":17,"v11":70,"v12":0,"v13":0,"v14":0,"v15":0,"v16":0}, 4659:{"id":4659,"v1":14,"v2":2,"v3":397,"v4":473,"v5":58,"v6":0,"v7":0,"v8":0,"v9":0,"v10":0,"v11":0,"v12":58,"v13":0,"v14":0,"v15":0,"v16":0}, 34501:{"id":34501,"v1":12,"v2":2,"v3":122,"v4":401,"v5":54,"v6":0,"v7":0,"v8":0,"v9":0,"v10":0,"v11":30,"v12":24,"v13":0,"v14":0,"v15":0,"v16":0}, 33700:{"id":33700,"v1":23,"v2":3,"v3":31,"v4":332,"v5":52,"v6":0,"v7":0,"v8":0,"v9":0,"v10":45,"v11":27,"v12":24,"v13":10,"v14":0,"v15":0,"v16":0}, 33465:{"id":33465,"v1":11,"v2":2,"v3":340,"v4":416,"v5":47,"v6":0,"v7":0,"v8":0,"v9":0,"v10":0,"v11":47,"v12":0,"v13":0,"v14":0,"v15":0,"v16":0}, 35485:{"id":35485,"v1":10,"v2":2,"v3":97,"v4":516,"v5":47,"v6":0,"v7":0,"v8":0,"v9":0,"v10":0,"v11":37,"v12":10,"v13":0,"v14":0,"v15":0,"v16":0}, 4420:{"id":4420,"v1":22,"v2":3,"v3":25,"v4":319,"v5":45,"v6":3.75,"v7":18,"v8":0,"v9":10,"v10":0,"v11":45,"v12":0,"v13":0,"v14":15,"v15":0,"v16":0}, 2624:{"id":2624,"v1":20,"v2":3,"v3":25,"v4":304,"v5":44,"v6":0,"v7":0,"v8":0,"v9":0,"v10":6,"v11":21,"v12":23,"v13":0,"v14":0,"v15":0,"v16":0}, 3888:{"id":3888,"v1":10,"v2":2,"v3":370,"v4":446,"v5":41,"v6":0,"v7":0,"v8":0,"v9":0,"v10":0,"v11":41,"v12":0,"v13":0,"v14":0,"v15":0,"v16":0}, 31505:{"id":31505,"v1":8,"v2":2,"v3":103,"v4":516,"v5":41,"v6":0,"v7":0,"v8":0,"v9":0,"v10":0,"v11":16,"v12":25,"v13":0,"v14":0,"v15":0,"v16":0}, 9148:{"id":9148,"v1":27,"v2":3,"v3":99,"v4":286,"v5":39.3,"v6":3.75,"v7":0,"v8":0,"v9":0,"v10":0,"v11":15,"v12":18,"v13":63,"v14":15,"v15":0,"v16":0}, 8814:{"id":8814,"v1":13,"v2":2,"v3":77,"v4":461,"v5":38.2,"v6":0,"v7":0,"v8":0,"v9":0,"v10":0,"v11":0,"v12":36,"v13":22,"v14":0,"v15":0,"v16":0}, 9863:{"id":9863,"v1":7,"v2":2,"v3":111,"v4":461,"v5":36,"v6":0,"v7":0,"v8":0,"v9":0,"v10":0,"v11":31,"v12":5,"v13":0,"v14":0,"v15":0,"v16":0}, 11403:{"id":11403,"v1":8,"v2":2,"v3":39,"v4":374,"v5":36,"v6":0,"v7":0,"v8":0,"v9":0,"v10":0,"v11":0,"v12":36,"v13":0,"v14":0,"v15":0,"v16":0} } и из него извлекать отсортированные по определенному ключу данные |
Cache, объект и сортировка несовместимы. Ты не властен над порядком ключей объекта. Так или иначе тебе придётся пердолить объект обратно в массив, сортировать массив, и пердолить результат обратно в объект:
obj={ 31061:{"id":31061,"v1":21,"v2":3,"v3":25,"v4":337,"v5":70,"v6":0,"v7":0,"v8":0,"v9":8,"v10":17,"v11":70,"v12":0,"v13":0,"v14":0,"v15":0,"v16":0}, 4659:{"id":4659,"v1":14,"v2":2,"v3":397,"v4":473,"v5":58,"v6":0,"v7":0,"v8":0,"v9":0,"v10":0,"v11":0,"v12":58,"v13":0,"v14":0,"v15":0,"v16":0}, 34501:{"id":34501,"v1":12,"v2":2,"v3":122,"v4":401,"v5":54,"v6":0,"v7":0,"v8":0,"v9":0,"v10":0,"v11":30,"v12":24,"v13":0,"v14":0,"v15":0,"v16":0}, 33700:{"id":33700,"v1":23,"v2":3,"v3":31,"v4":332,"v5":52,"v6":0,"v7":0,"v8":0,"v9":0,"v10":45,"v11":27,"v12":24,"v13":10,"v14":0,"v15":0,"v16":0}, 33465:{"id":33465,"v1":11,"v2":2,"v3":340,"v4":416,"v5":47,"v6":0,"v7":0,"v8":0,"v9":0,"v10":0,"v11":47,"v12":0,"v13":0,"v14":0,"v15":0,"v16":0}, 35485:{"id":35485,"v1":10,"v2":2,"v3":97,"v4":516,"v5":47,"v6":0,"v7":0,"v8":0,"v9":0,"v10":0,"v11":37,"v12":10,"v13":0,"v14":0,"v15":0,"v16":0}, 4420:{"id":4420,"v1":22,"v2":3,"v3":25,"v4":319,"v5":45,"v6":3.75,"v7":18,"v8":0,"v9":10,"v10":0,"v11":45,"v12":0,"v13":0,"v14":15,"v15":0,"v16":0}, 2624:{"id":2624,"v1":20,"v2":3,"v3":25,"v4":304,"v5":44,"v6":0,"v7":0,"v8":0,"v9":0,"v10":6,"v11":21,"v12":23,"v13":0,"v14":0,"v15":0,"v16":0}, 3888:{"id":3888,"v1":10,"v2":2,"v3":370,"v4":446,"v5":41,"v6":0,"v7":0,"v8":0,"v9":0,"v10":0,"v11":41,"v12":0,"v13":0,"v14":0,"v15":0,"v16":0}, 31505:{"id":31505,"v1":8,"v2":2,"v3":103,"v4":516,"v5":41,"v6":0,"v7":0,"v8":0,"v9":0,"v10":0,"v11":16,"v12":25,"v13":0,"v14":0,"v15":0,"v16":0}, 9148:{"id":9148,"v1":27,"v2":3,"v3":99,"v4":286,"v5":39.3,"v6":3.75,"v7":0,"v8":0,"v9":0,"v10":0,"v11":15,"v12":18,"v13":63,"v14":15,"v15":0,"v16":0}, 8814:{"id":8814,"v1":13,"v2":2,"v3":77,"v4":461,"v5":38.2,"v6":0,"v7":0,"v8":0,"v9":0,"v10":0,"v11":0,"v12":36,"v13":22,"v14":0,"v15":0,"v16":0}, 9863:{"id":9863,"v1":7,"v2":2,"v3":111,"v4":461,"v5":36,"v6":0,"v7":0,"v8":0,"v9":0,"v10":0,"v11":31,"v12":5,"v13":0,"v14":0,"v15":0,"v16":0}, 11403:{"id":11403,"v1":8,"v2":2,"v3":39,"v4":374,"v5":36,"v6":0,"v7":0,"v8":0,"v9":0,"v10":0,"v11":0,"v12":36,"v13":0,"v14":0,"v15":0,"v16":0} }; var result = Object.values(obj) //получаем массив значений из объекта .sort(function(a, b){ return b.v2 - a.v2 }) //сортируем по убыванию v2 .slice(0, 20) //отрезаем верхние 20 .reduce(function(a, b) { return a[b.id] = b, a; }, {}); //набиваем новый объект, где ключами - id alert(JSON.stringify(result,0,'\t')); |
Цитата:
не оптимально, мне кажется, будет занимать в памяти в 2 раза больше места, при том что вложенных объектов около 300 шт и может быть больше к тому же .slice(0, 20) в данном случае не даст поместить в туда все данные только часть разве нет? |
20 - это из условия конкретной задачи. По остальному см. выше.
|
Цитата:
Цитата:
|
Цитата:
|
Часовой пояс GMT +3, время: 21:11. |