按其中一个值对对象排序

时间:2016-03-15 17:15:10

标签: javascript jquery sorting

我试图通过其中一个值从最小到最大来对对象进行排序。例如:

{
    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。我有什么方法可以做到这一点吗?

P.S。我已经看到Stack Overflow上有一些类似的线程,但他们正在通过一个没有嵌套的对象对它进行排序,即{ obj1: 5, obj2: 3, obj3: 8}

2 个答案:

答案 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');