Rename js snippets
This commit is contained in:
42
snippets/js/s/order-object-array.md
Normal file
42
snippets/js/s/order-object-array.md
Normal file
@ -0,0 +1,42 @@
|
||||
---
|
||||
title: Order array of objects
|
||||
type: snippet
|
||||
language: javascript
|
||||
tags: [object,array]
|
||||
cover: volcano-sunset
|
||||
dateModified: 2020-10-21T21:54:53+03:00
|
||||
---
|
||||
|
||||
Sorts an 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 supplied.
|
||||
- If no `orders` array is supplied, sort by `'asc'` by default.
|
||||
|
||||
```js
|
||||
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)
|
||||
);
|
||||
```
|
||||
|
||||
```js
|
||||
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}]
|
||||
```
|
||||
Reference in New Issue
Block a user