使用JavaScript按值对JSON数组对象进行排序

19

我有一个 JSON 数组,想要按值进行排序。问题是我无法在排序时保持 JSON 结构。

以下是 JSON 数组:

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

我想要类似这样的东西:

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

3
你手头的数据是一个符合JSON格式的字符串、一个数组,或者很可能是一个普通的JavaScript对象?它是哪一种类型? - adeneo
2
这不是一个数组,它是一个对象。 - Eimantas
1
你不能对一个对象进行排序...但是可以创建一个函数,将其值放入数组中,然后进行排序。 - cocco
1
首先,"JSON数组"这种东西是不存在的。JSON是数据的字符串表示形式(就像XML或CSV一样)。如果它不是一个字符串,那么它就不是JSON。其次,这将是一个JavaScript对象(而不是数组)。在JavaScript中,对象无法进行排序,只有数组可以。你希望你的数据是一个数组,例如:[{familia: '4633452'}, {...}]。然后你可以对它进行排序。 - gen_Eric
2
这些是JavaScript对象字面量,语法对于JSON无效。 - Quentin
3个回答

25

这里有你所需的一切。

就像我在评论中已经说过的那样,您无法对对象进行排序。但您可以将其放入数组中并显示结果。

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

演示

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


这个可行!谢谢 :) - basic1point0
5
不必使用 array.reverse(),您可以将排序函数更改为 b[1] - a[1] - gen_Eric
对我来说没用。谢谢。 - Kamlesh

18

你可以将它转换为一个对象数组:

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

然后按数字排序

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

1
不能处理{string:string}的JSON数组。 - Mr_Hmp
@Mr_Hmp 将函数更改为: array.sort(function(a, b){ return a.name > b.name ? 0 : 1; }) - Abhijit Kumar
出现错误,未定义的排序函数。对我来说没有起作用。 - Kamlesh

6

这不是JSON,也不是数组。它是一个普通的JavaScript对象,你无法对对象的属性强制排序。

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

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

1
另外,您可以编写已排序的对象,并且可以在屏幕上显示已排序的对象,但是一旦将其定义为对象,您将失去顺序。请参见https://dev59.com/jW035IYBdhLWcg3wQtsg - brandonscript

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接