如何将JSON数组元素按降序排序?

3
在我的 index.html 文件中,我从服务器接收到的数据按照以下顺序排列:
[
  {id: 1, keyOne: valueOne, keyTwo: valueTwo},
  {id: 2, keyOne: valueOne, keyTwo: valueTwo},
  {id: 3, keyOne: valueOne, keyTwo: valueTwo},  
  {id: 4, keyOne: valueOne, keyTwo: valueTwo}
]

我想按照降序排序,如下:

[
  {id: 4, keyOne: valueOne, keyTwo: valueTwo},
  {id: 3, keyOne: valueOne, keyTwo: valueTwo},
  {id: 2, keyOne: valueOne, keyTwo: valueTwo},  
  {id: 1, keyOne: valueOne, keyTwo: valueTwo}
]

我在Stackoverflow上尝试了很多方法,但都没有找到完美的匹配。我该怎么做?


你尝试了什么没有成功? - wlh
3个回答

5
这可以通过使用数组的 sort() 方法轻松完成:

const input = [
    {id: 1, keyOne: "valueOne", keyTwo: "valueTwo"},
    {id: 2, keyOne: "valueOne", keyTwo: "valueTwo"},
    {id: 3, keyOne: "valueOne", keyTwo: "valueTwo"},
    {id: 4, keyOne: "valueOne", keyTwo: "valueTwo"}
];

let sortedInput = input.slice().sort((a, b) => b.id - a.id);
console.log(sortedInput);
.as-console {background-color:black !important; color:lime;}
.as-console-wrapper {max-height:100% !important; top:0;}

注意使用 slice() 方法的方式,调用 slice() 相当于调用 slice(0) 来创建原始数组的浅拷贝。这样,在调用 sort() 时,它就不会改变原始的 input 数组。

1
请注意,排序也会“原地”发生,因此input变量也将被修改。有关更多详细信息,请参见mdn-sort - romellem
感谢反馈,已更新为不修改原始输入。无论如何,他没有说不要改变输入。 - Shidersz

0

0
const JsonArray= [
    { id: 1, keyOne: "valueOne", keyTwo: "valueTwo"},
    { id: 2, keyOne: "valueOne", keyTwo: "valueTwo"},
    { id: 3, keyOne: "valueOne", keyTwo: "valueTwo"},  
    { id: 4, keyOne: "valueOne", keyTwo: "valueTwo"}
];

let JsonReversedArray= JsonArray.reverse();

console.log(JsonReversedArray);

将对象数组中的元素顺序反转

但在这种情况下,这种方法不起作用

const JsonArray= [
    { id: 1, keyOne: "valueOne", keyTwo: "valueTwo"},
    { id: 5, keyOne: "valueOne", keyTwo: "valueTwo"},
    { id: 3, keyOne: "valueOne", keyTwo: "valueTwo"},  
    { id: 4, keyOne: "valueOne", keyTwo: "valueTwo"}
];

正如您在这里看到的,如果您的ID已经按顺序排列,那么reverse方法将反转您的数组:

let JsonReversedArray= JsonArray.sort((a,b) => b.id - a.id);

这个在这种情况下是正确的


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