diff --git a/README.md b/README.md
index 8602666f2..76c1ece00 100644
--- a/README.md
+++ b/README.md
@@ -112,6 +112,7 @@
* [`cleanObj`](#cleanobj)
* [`objectFromPairs`](#objectfrompairs)
* [`objectToPairs`](#objecttopairs)
+* [`orderBy`](#orderby)
* [`select`](#select)
* [`shallowClone`](#shallowclone)
* [`truthCheckCollection`](#truthcheckcollection)
@@ -1534,6 +1535,35 @@ const objectToPairs = obj => Object.keys(obj).map(k => [k, obj[k]]);
// objectToPairs({a: 1, b: 2}) -> [['a',1],['b',2]])
```
+[⬆ back to top](#table-of-contents)
+
+### orderBy
+
+Returns a sorted array of objects ordered by properties and orders.
+
+Uses a custom implementation of sort, that reduces the props array argument with a default value of 0, it uses destructuring to swap the properties position depending on the order passed.
+If no orders array is passed it 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[i] === 'asc' ? [a[prop], b[prop]] : [b[prop], a[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 },{ 'name': 'barney', 'age': 34 }];
+orderby(users, ['name', 'age'], ['asc', 'desc']) -> [{name: 'barney', age: 36}, {name: 'barney', age: 34}, {name: 'fred', age: 48}, {name: 'fred', age: 40}]
+orderby(users, ['name', 'age']) -> [{name: 'barney', age: 34}, {name: 'barney', age: 36}, {name: 'fred', age: 40}, {name: 'fred', age: 48}]
+*/
+```
+
+
[⬆ back to top](#table-of-contents)
### select
diff --git a/docs/index.html b/docs/index.html
index f54dbf473..0e946aa88 100644
--- a/docs/index.html
+++ b/docs/index.html
@@ -154,6 +154,7 @@
cleanObj
objectFromPairs
objectToPairs
+orderBy
select
shallowClone
truthCheckCollection
@@ -964,6 +965,27 @@ Also if you give it a special key (childIndicator) it will search d
const objectToPairs = obj => Object.keys(obj).map(k => [k, obj[k]]);
// objectToPairs({a: 1, b: 2}) -> [['a',1],['b',2]])
+Returns a sorted array of objects ordered by properties and orders.
+Uses a custom implementation of sort, that reduces the props array argument with a default value of 0, it uses destructuring to swap the properties position depending on the order passed. +If no orders array is passed it 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[i] === 'asc' ? [a[prop], b[prop]] : [b[prop], a[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 },{ 'name': 'barney', 'age': 34 }];
+orderby(users, ['name', 'age'], ['asc', 'desc']) -> [{name: 'barney', age: 36}, {name: 'barney', age: 34}, {name: 'fred', age: 48}, {name: 'fred', age: 40}]
+orderby(users, ['name', 'age']) -> [{name: 'barney', age: 34}, {name: 'barney', age: 36}, {name: 'fred', age: 40}, {name: 'fred', age: 48}]
+*/
+
Retrieve a property that indicated by the selector from object.
If property not exists returns undefined.