2014-01-07 50 views
5

我有一个JSON数组,我试图按值排序。我遇到的问题是我无法通过排序保留JSON结构。使用Javascript按值排序JSON数组对象

这里是JSON阵列:

{ 
    caffeineoverdose: '2517', 
    workhardplayhard: '761277', 
    familia: '4633452' 
} 

我想是这样的:

{ 
    familia: '4633452', 
    workhardplayhard: '761277', 
    caffeineoverdose: '2517 
} 
+3

要么你有JSON格式的字符串,数组,或最有可能的常规JavaScript对象?哪一个 ? – adeneo

+2

这不是一个数组。这是一个对象。 – Eimantas

+1

你不能排序一个对象......但你可以创建一个函数并将这些值放入一个数组中..然后排序。 – cocco

回答

14

这里是你所需要的一切。

就像我在评论中已经说过的,你不能排序对象..但你可以把它放入一个数组并显示结果。

var array=[],obj={ 
caffeineoverdose:'2517', 
workhardplayhard:'761277', 
familia:'4633452' 
}; 
for(a in obj){ 
array.push([a,obj[a]]) 
} 
array.sort(function(a,b){return a[1] - b[1]}); 
array.reverse(); 

DEMO

http://jsfiddle.net/GB23m/1/

+0

这工作!谢谢:) – basic1point0

+4

而不是使用'array.reverse()',你可以改变排序函数为'b [1] - a [1]'。 –

6

这不是JSON,它不是一个数组。这是一个普通的JavaScript对象,您不能对对象的属性强加一个排序。

如果你想保持你的元素的顺序,你需要一个数组(再次,这不是JSON,它的JavaScript):

[ [ 'familia', '4633452'] , 
    [ 'workhardplayhard', '761277'], 
    [ 'caffeineoverdose', '2517'] 
] 
+1

要添加,您可以写入已排序的对象,并且可以在屏幕上显示排序后的对象,但是一旦将其定义为对象,就会失去顺序。见http://stackoverflow.com/questions/5525795/does-javascript-guarantee-object-property-order – brandonscript

6

你可以把它转换成对象的数组:

[{ name: 'caffeineoverdose', number: '2517' }, {name: 'workhardplayhard', number: '761277'}, {name: 'familia', number: '4633452'}] 

,然后排序ID

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