【问题标题】:Sort by multiple condition in JavaScript [duplicate]在JavaScript中按多个条件排序[重复]
【发布时间】:2021-07-04 00:10:46
【问题描述】:

我有两列值。如果第一列任何值变为 0,则按另一列值排序。

可能的输入

Django      Rect
10          20
20          11
1           100
100         1
0           1
0           100
0           9
0           0
0           0

预期结束

Django      Rect
100         1
20          11
10          20
1           100
0           100
0           9
0           1
0           0
0           0

我希望降序排序。我可以对一列中的任何一列进行排序,但我需要根据给定条件一次对两列进行排序。 到目前为止我已经尝试过

all_data.sort(function(a,b){
      return a.Django- b.Django;
    }
);

【问题讨论】:

  • 你应该搜索javascript没有反应,参考this question
  • 第二列的输出是否已排序?我只能看到数据是随机排列的。
  • @AL-zami 我问 Django 是否为 0,那么 react 将按 desc 顺序排序。在此之前 Django 将按 desc 顺序排序

标签: javascript arrays sorting


【解决方案1】:

您的问题如下所示:“您要排序的序数属性”

更准确地说,应该对DjangoRect 进行排序。

const all_data = [{Django:10,Rect:20},{Django:20,Rect:11},{Django:1,Rect:100},{Django:100,Rect:1},{Django:0,Rect:1},{Django:0,Rect:100},{Django:0,Rect:9},{Django:0,Rect:0},{Django:0,Rect:0}];

all_data.sort((a, b) => b.Django - a.Django || b.Rect - a.Rect);
console.log(all_data);

说明:

首先,按Django 排序。 其次,如果Django相同,那么将按Rect进行desc排序

【讨论】:

    【解决方案2】:

    您说您只想在Django 为0 时按Rect 排序。但是,在我看来,在a.Django === b.Django 的所有情况下最好按Rect 排序。

    您可以在比较函数中检查是否相等。

    all_data.sort(function(a,b) {
            if (a.Django === b.Django) {
                return a.Rect - b.Rect;
            }
            return a.Django- b.Django;
        }
    );
    

    【讨论】:

    • 可简写为all_data.sort((a, b) => b.Django - a.Django || b.Rect - a.Rect);
    猜你喜欢
    • 2011-02-07
    • 2013-09-13
    • 1970-01-01
    • 1970-01-01
    • 2021-10-27
    • 2021-03-21
    • 2018-11-19
    • 2015-08-08
    • 1970-01-01
    相关资源
    最近更新 更多