用 JavaScript 按两个条件对数组进行排序


按日期和 isImportant 排序以下数组。具有 isImportant 属性 true 的所有对象均高于具有 isImportant false 的任何对象,并且两组按 date 属性进行排序。

以下为我们的数组 −

const array = [{
   id: 545,
   date: 591020824000,
   isImportant: false,
},
{
   id: 322,
   date: 591080224000,
   isImportant: false,
},
{
   id: 543,
   bdate: 591080424000,
   isImportant: true,
},
{
   id: 423,
   date: 591080225525,
   isImportant: false,
},
{
   id: 135,
   date: 591020225525,
   isImportant: true,
},
];

此后,我们可以像这样使用数组排序方法来实现以上数组上的所需结果 −

array.sort((a, b) => {
   if(a.isImportant && !b.isImportant){
      return -1;
   }else if(!a.isImportant && b.isImportant){
      return 1;
   }else{
      return b.date-a.date;
   }
});

sort() 回调函数通常接收两个参数,比如 a 和 b,它们不过是 sort() 所调用数组的两个元素,并且回调函数针对数组每个可能的元素对运行。

从回调函数返回 -1(任何负值)表示我们将第一个元素排在第二个元素之上。

从回调函数返回 1(任何正值)表示我们将第二个元素排在第一个元素之上。

返回 0 不做任何更改。我们检查 a 或 b 是否将 isImportant 属性设为 false,如果是,我们将对其进行降级。否则,我们将根据它们的 date 属性对它们进行排序。

示例

现在让我们来看一个完整的示例 −

const array = [{
   id: 545,
   date: 591020824000,
   isImportant: false,
},
{
   id: 322,
   date: 591080224000,
   isImportant: false,
},
{
   id: 543,
   bdate: 591080424000,
   isImportant: true,
},
{
   id: 423,
   date: 591080225525,
   isImportant: false,
},
{
   id: 135,
   date: 591020225525,
   isImportant: true,
},
];
array.sort((a, b) => {
   if(a.isImportant && !b.isImportant){
      return -1;
   }else if(!a.isImportant && b.isImportant){
      return 1;
   }else{
      return b.date-a.date;
   }
});
console.log(array);

输出

在控制台中输入代码的输出将是 −

[
   { id: 3, date: 591080424000, isImportant: true },{ id: 5, date: 591020225525, isImportant: true },
   { id: 4, date: 591080225525, isImportant: false },{ id: 2, date: 591080224000, isImportant: false },
   { id: 1, date: 591020824000, isImportant: false }
]

更新于:18-Aug-2020

3K+ 查看次数

开启您的职业生涯

完成课程以获得认证

开始
广告
© . All rights reserved.