將陣列按順序排列,優先顯示陣列中特定的項 - 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 } ]
廣告