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

javascriptweb developmentobject oriented programming更新于 2025/9/24 14:04:17

让以下数组按日期和 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 }
]

相关文章


有用资源