Sorts an array of objects, ordered by properties and orders.
Array.prototype.sort()
, Array.prototype.reduce()
on the props
array with a default value of 0
.orders
array is supplied, sort by 'asc'
by default.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}]
JavaScript, Array
Sorts an array of objects, ordered by a property, based on the array of orders provided.
JavaScript, Object
Produces an array of objects from an object and one of its array-valued properties.
JavaScript, Object
Maps an object to an object array, using the provided mapping function.