[英]Sort object by one of its values
我正在尝试按值从最小到最大的顺序对对象进行排序。 例如:
{
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
。 有什么办法可以做到吗?
PS我已经看到在Stack Overflow上有一些与此类似的线程,但是它们是通过未嵌套的对象(即{ obj1: 5, obj2: 3, obj3: 8}
对它进行排序的
如果您不能将对象更改为数组(如您在其中的一条评论中所告知),则可以引入一个数组,该数组包含对要排序的对象的引用,然后使用该数组访问这些对象:
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;
} );
首先,您需要将对象转换为数组。 这是必须的,因为对象字段不是按自然顺序排列的。 这是一个这样的数组的例子:
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');
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.