【问题标题】:Sorting array based on a property value [duplicate]基于属性值对数组进行排序[重复]
【发布时间】:2021-04-24 11:14:35
【问题描述】:

我正在尝试根据该数组中的属性值对该对象数组进行排序。当我向正在使用的 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() 方法来避免编写一个大而复杂的函数。这就是我要找的。​​p>

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, …}

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

【问题讨论】:

  • 提供一个 MRE 来演示您所描述的行为。

标签: javascript arrays sorting


【解决方案1】:

试试这个:

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)

【讨论】:

  • array.sort() 对数组进行就地排序。分配给新变量没有意义。
  • 是的,我刚刚意识到,在我发表评论后......我编辑了我的答案
【解决方案2】:

你不需要这么复杂a.totalAmountRaised &lt; 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}));

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-03-13
    • 2014-08-25
    • 2021-02-23
    • 1970-01-01
    • 1970-01-01
    • 2017-07-18
    • 2021-01-13
    • 1970-01-01
    相关资源
    最近更新 更多