我试图通过其中一个值从最小到最大来对对象进行排序。例如:
{
obj1: {
key1: something,
key2: 54,
key3: "something else"
},
obj2:{
key1: something,
key2: 27,
key3: "another thing"
},
obj3:{
key1: anotherSomething,
key2: 78,
key3: "whatever"
}
}
按key2
排序时,应obj2
,obj1
,obj3
。我有什么方法可以做到这一点吗?
P.S。我已经看到Stack Overflow上有一些类似的线程,但他们正在通过一个没有嵌套的对象对它进行排序,即{ obj1: 5, obj2: 3, obj3: 8}
答案 0 :(得分:1)
如果您无法将对象更改为数组(正如您在其中一条注释中告知我们的那样),您可以引入一个数组,其中包含您希望排序的对象的引用,然后使用该数组来访问这些对象:
var obj = {
obj1: {
key1: something,
key2: 54,
key3: "something else"
},
obj2:{
key1: something,
key2: 27,
key3: "another thing"
},
obj3:{
key1: anotherSomething,
key2: 78,
key3: "whatever"
}
};
var arr = [ obj.obj1, obj.obj2, obj.obj3 ];
arr.sort( function( a, b ){
return a.key2 - b.key2;
} );
答案 1 :(得分:0)
首先,您需要将对象转换为数组。这是必须的,因为对象字段本质上不是有序的。这是一个这样的数组的例子:
var arr =
[
{
key1: something,
key2: 54,
key3: "something else"
},
{
key1: something,
key2: 27,
key3: "another thing"
},
{
key1: anotherSomething,
key2: 78,
key3: "whatever"
}
];
当你有一个数组时,你可以用不同的方式对它的元素进行排序。例如,如果您使用Underscore.js,则可以执行以下操作:
_.sortBy(arr, 'key2');