【问题标题】:How to sort JSON array elements in descending order? [duplicate]如何按降序对 JSON 数组元素进行排序? [复制]
【发布时间】:2019-06-06 16:42:53
【问题描述】:

在我的 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 尝试了多种方法,但找不到完美匹配。我该怎么做?

【问题讨论】:

  • 你试过什么没用?

标签: javascript arrays json


【解决方案1】:

使用数组的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 数组。

【讨论】:

  • 请注意,排序也发生在“原地”,因此input 变量也会被修改。有关详细信息,请参阅mdn - sort
  • 感谢您的反馈,已更新为不触及原始输入。无论如何,他没有说不改变输入。
【解决方案2】:

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort

my_array.sort(function(a, b) {
    if (a.id > b.id) return -1;
    else if (a.id < b.id) return 1;
    else return 0;
});

【讨论】:

    【解决方案3】:
    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);
    

    这对于这种情况是正确的

    【讨论】:

      猜你喜欢
      • 2021-12-06
      • 2020-03-06
      • 2019-05-02
      • 2013-01-03
      • 2019-11-04
      • 2014-02-16
      • 1970-01-01
      • 2011-11-16
      相关资源
      最近更新 更多