如何按降序对 JSON 数组元素进行排序? [复制]

Posted

技术标签:

【中文标题】如何按降序对 JSON 数组元素进行排序? [复制]【英文标题】:How to sort JSON array elements in descending order? [duplicate] 【发布时间】: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
]

我从 *** 尝试了多种方法,但找不到完美匹配。我该怎么做?

【问题讨论】:

你试过什么没用? 【参考方案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);

这对于这种情况是正确的

【讨论】:

以上是关于如何按降序对 JSON 数组元素进行排序? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

如何在Ruby中按降序对数组进行排序

如何根据特定值按降序对数组进行排序[重复]

按降序对数组进行排序的更好方法

如何在php中按降序对数组进行排序?

按降序对int数组进行排序[重复]

按降序对对象数组进行排序[关闭]