在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 }
]