繁体   English   中英

按对象的值之一对对象进行排序

[英]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排序时,应以obj2obj1obj3 有什么办法可以做到吗?

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM