根据属性值对数组进行排序

时间:2021-01-20 05:33:51

标签: javascript arrays sorting

我正在尝试根据该数组中的属性值对该数组进行排序。当我向我使用的 API 提出请求时,这就是返回给我的内容。

0: {id: 23634, pollId: 6907, name: "B", type: "PollOption", totalAmountRaised: 341, …}
1: {id: 23635, pollId: 6907, name: "A", type: "PollOption", totalAmountRaised: 636, …}
2: {id: 23641, pollId: 6907, name: "C", type: "PollOption", totalAmountRaised: 246, …}
3: {id: 23642, pollId: 6907, name: "D", type: "PollOption", totalAmountRaised: 1092, …}
4: {id: 23643, pollId: 6907, name: "E", type: "PollOption", totalAmountRaised: 0, …}

我想按照 totalAmountRaised 值从大到小对数组进行排序。我正在尝试使用 sort() 方法来避免编写大型复杂函数。这就是我要找的。

arrayToSort.sort((a, b) => (a.totalAmountRaised < b.totalAmountRaised) ? 1 : -1);

0: {id: 23642, pollId: 6907, name: "D", type: "PollOption", totalAmountRaised: 1092, …}
1: {id: 23635, pollId: 6907, name: "A", type: "PollOption", totalAmountRaised: 636, …}
2: {id: 23634, pollId: 6907, name: "B", type: "PollOption", totalAmountRaised: 341, …}
3: {id: 23641, pollId: 6907, name: "C", type: "PollOption", totalAmountRaised: 246, …}
4: {id: 23643, pollId: 6907, name: "E", type: "PollOption", totalAmountRaised: 0, …}

但是,当我运行该方法时,它只交换 totalAmountRaised 的值,它实际上并没有改变数组的顺序,这正是我正在寻找的。这是实际返回的内容。

0: {id: 23634, pollId: 6907, name: "B", type: "PollOption", totalAmountRaised: 1092, …}
1: {id: 23635, pollId: 6907, name: "A", type: "PollOption", totalAmountRaised: 636, …}
2: {id: 23641, pollId: 6907, name: "C", type: "PollOption", totalAmountRaised: 341, …}
3: {id: 23642, pollId: 6907, name: "D", type: "PollOption", totalAmountRaised: 246, …}
4: {id: 23643, pollId: 6907, name: "E", type: "PollOption", totalAmountRaised: 0, …}

任何帮助将不胜感激,谢谢!

2 个答案:

答案 0 :(得分:0)

试试这个:

let arr = [
{id: 23634, pollId: 6907, name: "B", type: "PollOption", totalAmountRaised: 341,},
{id: 23635, pollId: 6907, name: "A", type: "PollOption", totalAmountRaised: 636,},
{id: 23641, pollId: 6907, name: "C", type: "PollOption", totalAmountRaised: 246,},
{id: 23642, pollId: 6907, name: "D", type: "PollOption", totalAmountRaised: 1092,},
{id: 23643, pollId: 6907, name: "E", type: "PollOption", totalAmountRaised: 0},
]

let sorted = arr.sort((a, b) => b.totalAmountRaised - a.totalAmountRaised)
console.log(sorted)

答案 1 :(得分:0)

您不需要所有这些复杂的a.totalAmountRaised < b.totalAmountRaised) ? 1 : -1

这应该是: b.totalAmountRaised - a.totalAmountRaised

你只需要这个:

let arrayToSort = [
    {id: 23634, pollId: 6907, name: "B", type: "PollOption", totalAmountRaised: 341,},
    {id: 23635, pollId: 6907, name: "A", type: "PollOption", totalAmountRaised: 636,},
    {id: 23641, pollId: 6907, name: "C", type: "PollOption", totalAmountRaised: 246,},
    {id: 23642, pollId: 6907, name: "D", type: "PollOption", totalAmountRaised: 1092,},
    {id: 23643, pollId: 6907, name: "E", type: "PollOption", totalAmountRaised: 0},
];
console.log(arrayToSort.sort((a, b) => {return b.totalAmountRaised - a.totalAmountRaised}));