【问题标题】:Sort a JSON array object using Javascript by value [duplicate]使用Javascript按值对JSON数组对象进行排序[重复]
【发布时间】:2023-07-06 03:56:01
【问题描述】:

我有一个 JSON 数组,我正在尝试按值对其进行排序。我遇到的问题是我无法在排序时保留 JSON 结构。

这是 JSON 数组:

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

我想要这样的东西:

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

【问题讨论】:

  • 您有一个 JSON 格式的字符串、一个数组,还是很可能是一个常规的 javascript 对象?是哪一个?
  • 它不是一个数组。这是一个对象。
  • 您无法对对象进行排序...但您可以创建一个函数并将该值放入数组中...然后进行排序。
  • 首先,没有“JSON 数组”之类的东西。 JSON 是数据的字符串表示形式(如 XML 或 CSV)。如果不是字符串,则不是 JSON。其次,这将是一个 JavaScript 对象(不是数组)。对象可以在 JavaScript 中排序,只有数组可以。您希望数据位于数组中,例如:[{familia: '4633452'}, {...}]。然后你就可以排序了。
  • 这些是 JavaScript 对象文字,语法对 JSON 无效。

标签: javascript arrays json sorting


【解决方案1】:

这里有你需要的一切。

就像我在 cmets 中已经说过的,您不能对对象进行排序。但您可以将其放入数组中并显示结果。

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/

【讨论】:

  • 这成功了!谢谢:)
  • 不使用array.reverse(),只需将排序函数改为b[1] - a[1]即可。
【解决方案2】:

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

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

然后按数字排序

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

【讨论】:

  • 不适用于 {string:string} 的 json 数组
【解决方案3】:

这不是 JSON,也不是数组。它是一个常规的 JavaScript 对象,您不能对对象的属性进行排序。

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

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

【讨论】:

  • 要添加,您可以写入已排序的对象,并且可以将其显示在屏幕上排序,但是一旦将其定义为对象,您就会失去顺序。见*.com/questions/5525795/…