2020-08-17
描述
将数组对象根据指定的属性和排序方式进行排序。
提示
- 使用
Array.prototype.sort()
- 在给定的
props
数组上使用默认值为 0 的Array.prototype.reduce()
方法 - 根据传如的排序规则使用数组解构来交换其属性位置
orders
数组的默认值为'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)
);
示例
按照 name
和 age
属性进行排序:
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}]