如何对此javascript对象进行排序?

时间:2011-07-31 04:38:34

标签: javascript arrays sorting object

如果我有这样的javascript对象:

{ 'apples':14, 'oranges': 1, 'bananas':4 }

如何根据值将数据按降序排序为数组?

结果:

[ 'apples', 'bananas', 'oranges' ]

因为14,14 ......降序

3 个答案:

答案 0 :(得分:4)

将对象中的所有键拉入数组并对数组进行排序。

var o = { 'apples':14, 'oranges': 1, 'bananas':4 };
var a = [];

for (var key in o) {
    a.push(key);
}
a.sort();

如果您认为需要防止以不友好的方式(或不知道)添加到Object原型的属性,那么您应该这样做:

var o = { 'apples':14, 'oranges': 1, 'bananas':4 };
var a = [];

for (var key in o) {
    if (o.hasOwnProperty(key)) {
        a.push(key);
    }
}
a.sort();

编辑:现在原始问题已经更改,现在要求按键按原始对象中的值按顺序排序,这必须以不同的方式完成:

var o = { 'apples':14, 'oranges': 1, 'bananas':4 };
var a = [];

for (var key in o) {
    if (o.hasOwnProperty(key)) {
        a.push(key);
    }
}
a.sort(function(x, y) {return(o.y - o.x);});

答案 1 :(得分:1)

这是我解决这个问题的方法:

var o={ 'apples':14, 'oranges': 1, 'bananas':4 };
var a=[];
for(var fruit in o)
{
   if(o[fruit])
      a[fruit]=o[fruit];  i.e // a[apples]=14;
}

a.sort(function(a,b){return Number(a)-Number(b);});

现在a按值排序。

console.log("Sorted Fruits:")
for(var fruit in o)
{
    if(o[fruit])
       console.log(fruit);
}

答案 2 :(得分:1)

以下是ES5的方法:

var fruit = { 'apples':14, 'oranges':1, 'grapefruit':70, 'bananas':4 }

var orderedByDescendingQuantities = Object.keys(fruit).sort(function (x, y) {
    return fruit[y] - fruit[x];
});

alert(orderedByDescendingQuantities);

请参阅http://jsfiddle.net/gh5x8/