From 59b3b901b54f0d21fef683e0b402a1ba81c90c19 Mon Sep 17 00:00:00 2001 From: Angelos Chalaris Date: Wed, 20 Dec 2017 11:34:13 +0200 Subject: [PATCH] Build --- README.md | 30 ++++++++++++++++++++++++++++++ docs/index.html | 22 ++++++++++++++++++++++ tag_database | 1 + 3 files changed, 53 insertions(+) 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]])
 
+

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.

+
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}]
+*/
+

select

Retrieve a property that indicated by the selector from object.

If property not exists returns undefined.

diff --git a/tag_database b/tag_database index 3a78d941c..a6657b911 100644 --- a/tag_database +++ b/tag_database @@ -71,6 +71,7 @@ median:math nthElement:array objectFromPairs:object objectToPairs:object +orderBy:object palindrome:math percentile:math pick:array