將陣列按順序排列,優先顯示陣列中特定的項 - JavaScript


假設我們有一個這樣的物件陣列 −

const arr = [
   {flag: true, other: 1},
   {flag: true, other: 2},
   {flag: false, other: 3},
   {flag: true, other: 4},
   {flag: true, other: 5},
   {flag: true, other: 6},
   {flag: false, other: 7}
];

我們需要寫一個接收這種陣列的 JavaScript 函式,並按以下條件對該陣列進行排序 −

  • 如果 arr.flag === false,則匹配的元素將優先放置在陣列中,但僅在先前的匹配元素之後。
  • 不匹配的元素按其原始順序保持不變。
  • 出現順序很重要。

因此,對於以上陣列,輸出應為 −

const output = [
   {flag: false, other: 3},
   {flag: false, other: 7},
   {flag: true, other: 1},
   {flag: true, other: 2},
   {flag: true, other: 4},
   {flag: true, other: 5},
   {flag: true, other: 6}
];

示例

以下為程式碼 −

const arr = [
   {flag: true, other: 1},
   {flag: true, other: 2},
   {flag: false, other: 3},
   {flag: true, other: 4},
   {flag: true, other: 5},
   {flag: true, other: 6},
   {flag: false, other: 7}
];
const sortByFlag = arr => {
   const sorter = (a, b) => {
      if(!a['flag'] && b['flag']){
         return -1;
      };
      if(a['flag'] && !b['flag']){
         return 1;
      }
      return a['other'] - b['other'];
   }
   arr.sort(sorter);
};
sortByFlag(arr);
console.log(arr);

輸出

這將在控制檯上產生以下輸出 −

[
   { flag: false, other: 3 },
   { flag: false, other: 7 },
   { flag: true, other: 1 },
   { flag: true, other: 2 },
   { flag: true, other: 4 },
   { flag: true, other: 5 },
   { flag: true, other: 6 }
]

更新時間: 01-Oct-2020

2,000+ 檢視次數

開啟你的 職業生涯

透過完成課程獲得認證

開始使用
廣告