6

我有一个对象文字,其键的值是更多对象,内部对象的键之一被命名为“rank” - 并且具有浮点值。我想将对象文字转换为内部对象的数组,按“rank”的值排序。

输入对象:

{
452:{
     bla:123,
     dff:233,
     rank:2
  },
234:{
     bla:123,
     dff:233,
     rank:1
  }

}

输出数组:

[
 { bla:123, dff:233, rank:1},
 { bla:123, dff:233, rank:2 }
]
4

2 回答 2

11

例子:

var data = {
    foo: {
        rank: 5
    },
    bar: {
        rank: 2
    },
    baz: {
        rank: 8
    }
};

Javascript:

var mappedHash = Object.keys( data ).sort(function( a, b ) {
    return data[ a ].rank - data[ b ].rank;
}).map(function( sortedKey ) {
    return data[ sortedKey ];
});

这将首先sort是内部对象的值,obj.rank然后map是包含对象的Array

结果[{rank: 2}, {rank: 5}, {rank: 8}]


参考:Object.keys, Array.prototype.sort,Array.prototype.map


上面的代码包含 ECMAscript 262 第 5 版代码,在所有现代浏览器中都可用。如果您还想支持旧版浏览器,则需要包含各种 ES5-Shim 库之一。

于 2012-12-04T01:49:48.057 回答
0

遍历对象的属性,将内部对象推入数组,然后使用自定义排序函数对数组进行排序:

var inputObject = {}, // your object here
    arr = [];

for (var k in inputObject)
    arr.push(inputObject[k]);

arr.sort(function(a,b) { return a.rank - b.rank; });
于 2012-12-04T01:51:13.683 回答