将对象文字转换为已排序的数组

Dan*_*iel 6 javascript arrays sorting

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

输入对象:

{
452:{
     bla:123,
     dff:233,
     rank:2
  },
234:{
     bla:123,
     dff:233,
     rank:1
  }
Run Code Online (Sandbox Code Playgroud)

}

输出数组:

[
 { bla:123, dff:233, rank:1},
 { bla:123, dff:233, rank:2 }
]
Run Code Online (Sandbox Code Playgroud)

jAn*_*ndy 10

例:

var data = {
    foo: {
        rank: 5
    },
    bar: {
        rank: 2
    },
    baz: {
        rank: 8
    }
};
Run Code Online (Sandbox Code Playgroud)

使用Javascript:

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

那将首先sort将内部对象的值obj.rank和之后map的包含对象放入一个数组中.

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


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


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