orderBy - 排序对象数组
优质
小牛编辑
128浏览
2023-12-01
返回按属性(props
)和顺序(orders
)排序的对象数组。
在默认值为 0
的 props
数组上使用 Array.sort()
,Array.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) );
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}]