Returns a sorted array of objects ordered by properties and orders.
Uses Array.prototype.sort(), Array.prototype.reduce() on the props array with a default value of 0, use array destructuring to swap the properties position depending on the order passed. If no orders array is passed it sort by 'asc' by default.
基本上就是做陣列的排序,
按照對象屬性和排序規則,排序對象陣列。
1.使用 Array.sort()自定義排序規則排序,根據傳入的order
如果沒有傳入的參數order 默認為asc。
const orderBy = (arr, props, orders) =>
[...arr].sort((a, b) =>
props.reduce((acc, prop, i) => {
if (acc === 0) {
const [p1, p2] = orders && orders[i] === 'desc' ? [b[prop], a[prop]] : [a[prop], b[prop]];
acc = p1 > p2 ? 1 : p1 < p2 ? -1 : 0;
}
return acc;
}, 0)
);
EXAMPLES
const users = [{ name: 'fred', age: 48 }, { name: 'barney', age: 36 }, { name: 'fred', age: 40 }];
orderBy(users, ['name', 'age'], ['asc', 'desc']); // [{name: 'barney', age: 36}, {name: 'fred', age: 48}, {name: 'fred', age: 40}]
orderBy(users, ['name', 'age']); // [{name: 'barney', age: 36}, {name: 'fred', age: 40}, {name: 'fred', age: 48}]
1.解構賦值
在物件解構賦值中,冒號前是用來對應物件的屬性名稱,冒號後才是真正建立的變數名稱和被賦值的對象
let obj = {
website: "tommy",
country: "Taiwan"
}
let {website, country} = obj;
console.log(website); // tommy"
console.log(country); // Taiwan
2.Array.sort()
可以發現 Array 上的 sort 方法是可以接受一個回調函數
function compare(a, b) {
if (在某排序標準下 a 小於 b) {
return -1;
}
if (在某排序標準下 a 大於 b) {
return 1;
}
// a 必須等於 b
return 0;
}
回調函數 就是一個排序規則 分為三種:
if (a < b) {
return -1;
}
// 如果有兩數 a b
// 當 a 小於 b 的時候
// 幫我把 a 排在 b 前面
if (a > b) {
return 1;
}
// 如果有兩數 a b
// 當 a 大於 b 的時候
// 幫我把 a 排在 b 的後面
// a 此時等於 b
return 0;
// 回傳零代表不改變彼此之間的順序
// 當我們想要由小往大
arr.sort((a,b)=>a-b);
// 當我們想要由大至小
arr.sort((a,b)=>b-a);