用 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.