我有一个对象文字,其键的值是更多的对象,内部对象的一个键被命名为“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 }
]
答案 0 :(得分:9)
示例:
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
将包含的对象放入数组。
结果:[{rank: 2}, {rank: 5}, {rank: 8}]
参考:Object.keys
,Array.prototype.sort
,Array.prototype.map
以上代码包含ECMAscript 262版本5代码,可在所有现代浏览器中使用。如果您还想支持旧版浏览器,则需要包含各种ES5-Shim库中的一个。
答案 1 :(得分: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; });