用給定的順序改變陣列本來的順序
公司要提供客戶美食優惠券,公司資料庫中有客戶偏好的食物類型,我心想這個簡單,不就打個 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/