2011-07-31 51 views
0

如果我有一个JavaScript对象是这样的:如何对这个javascript对象进行排序?

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

我如何排序是一个数组,按降序排列,基于价值?

结果:

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

因为如图14所示,4个,1 ...降序

回答

4

从物体的所有键拉到一个数组和对数组进行排序。

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

for (var key in o) { 
    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(); 

编辑:现在,原来的问题已经改变,并且要求是,现在的关键是为了在原始对象的值进行排序,那将不得不做不同:

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

只是一个供参考:因为JavaScript对象的构建方式,你应该始终包的换里面在具有'hasOwnProperty'的循环中:https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Object/hasOwnProperty#section_8 – OverZealous

+0

如果它是您自己的代码,并且您知道发生了什么,并且没有人扩展对象类对于'fo'有不友好的附加属性r'循环,没有必要包装它。如果你不知道项目中发生的一切,那么我同意保护它免于流浪财产更安全。 – jfriend00

+0

好的,我为那些允许将对象原型与他们的项目混为一谈的人(我不允许的东西)添加了选项。 – jfriend00

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);}); 

现在由值排序。

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

但'a'不是['苹果','香蕉','桔子'],一个数组。 'a'是[苹果:14,橙子:1,香蕉:4] – TIMEX

+0

http://stackoverflow.com/questions/684672/loop-through-json-object – Baz1nga

+0

这产生了一个值的数组,它不是什么要求。经过一番讨论后,看起来他们希望按照这些键值的顺序排列一组键。 – jfriend00

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/

相关问题