用給定的順序改變陣列本來的順序

公司要提供客戶美食優惠券,公司資料庫中有客戶偏好的食物類型,我心想這個簡單,不就打個 API 就把資料取回來了嗎,取回的資料結果如下:

const arr=[
  {
    name: "小明",
    type: "牛排", 
  },
  {
    name: "小華",
    type: "壽司",
  },
  {
    name: "小春",
    type: "燒肉",
  },
  {
    name: "小陽",
    type: "義大利麵",
  },
  {
    name: "小陽",
    type: "麥當勞",
  }
];

但這時候,行銷部門的經理跑來說,這個名單要按照這樣的「”燒肉”,”牛排”,”壽司”,”麥當勞”,”義大利麵”」順序來排列。

要解決這個問題,我們可以先根據食物順序排定一個陣列:

const typeOrder = ["燒肉","牛排","壽司","麥當勞","義大利麵"];

然後利用 Array.prototype.indexOf() 與 Array.prototype.sort() 來重新排列原始陣列的順序:

arr.sort((a, b) => {
  console.log(typeOrder.indexOf(a.type));
  console.log(typeOrder.indexOf(b.type));
  return typeOrder.indexOf(a.type) - typeOrder.indexOf(b.type);
});

Array.prototype.indexOf()會回傳給定元素於陣列中第一個被找到之索引位置,若不存在於陣列中則回傳 -1。

Array.prototype.sort() 方法會原地(in place)對一個陣列的所有元素進行排序,並回傳此陣列。


用給定的順序改變陣列本來的順序
https://popeye-ux.github.io/2023/05/14/js-resort-array/
作者
POPEYE
發布於
2023年5月14日
許可協議