From 3c48c3b5d8d19b29c4e5b0e534d1c10beab1e20f Mon Sep 17 00:00:00 2001 From: Justin Lee Date: Fri, 15 Dec 2017 07:39:39 -0800 Subject: [PATCH 1/3] Added compose such that the rightmost function may have any arity. Added spread operator to explanation of pipe. --- snippets/compose.md | 14 ++++++++++++++ snippets/pipe.md | 2 +- 2 files changed, 15 insertions(+), 1 deletion(-) create mode 100644 snippets/compose.md diff --git a/snippets/compose.md b/snippets/compose.md new file mode 100644 index 000000000..90088ebe2 --- /dev/null +++ b/snippets/compose.md @@ -0,0 +1,14 @@ +### Compose + +Use `Array.reduce()` with the spread operator (`...`) to perform right-to-;eft function composition. +The last (rightmost) function can accept one or more arguments; the remaining functions must be unary. + +```js +const compose = (...fns) => fns.reduce((f, g) => (...args) => f(g(...args))); +/* +const add5 = x => x + 5 +const multiply = (x, y) => x * y +const multiplyAndAdd5 = compose(add5, multiply) +multiplyAndAdd5(5, 2) -> 15 +*/ +``` diff --git a/snippets/pipe.md b/snippets/pipe.md index e5136777b..434b4c0c3 100644 --- a/snippets/pipe.md +++ b/snippets/pipe.md @@ -1,6 +1,6 @@ ### Pipe -Use `Array.reduce()` to perform left-to-right function composition. +Use `Array.reduce()` with the spread operator (`...`) to perform left-to-right function composition. The first (leftmost) function can accept one or more arguments; the remaining functions must be unary. ```js From fd3ef95ab3ba1f69ae3a8cae42c564ab558292f3 Mon Sep 17 00:00:00 2001 From: Justin Lee Date: Fri, 15 Dec 2017 08:44:13 -0800 Subject: [PATCH 2/3] Modified zip to use spread operator instead of Array.apply --- snippets/array-zip.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/snippets/array-zip.md b/snippets/array-zip.md index 6c9a2491b..5c3193605 100644 --- a/snippets/array-zip.md +++ b/snippets/array-zip.md @@ -6,7 +6,7 @@ If lengths of the argument-arrays vary, `undefined` is used where no value could ```js const zip = (...arrays) => { - const maxLength = Math.max.apply(null, arrays.map(a => a.length)); + const maxLength = Math.max(...arrays.map(x => x.length)); return Array.from({length: maxLength}).map((_, i) => { return Array.from({length: arrays.length}, (_, k) => arrays[k][i]); }) From 0b844e4b3abbda87b55398f6b57f63dfd1e567d7 Mon Sep 17 00:00:00 2001 From: Angelos Chalaris Date: Sat, 16 Dec 2017 13:43:15 +0200 Subject: [PATCH 3/3] Update and rename compose.md to compose-functions.md --- snippets/{compose.md => compose-functions.md} | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) rename snippets/{compose.md => compose-functions.md} (95%) diff --git a/snippets/compose.md b/snippets/compose-functions.md similarity index 95% rename from snippets/compose.md rename to snippets/compose-functions.md index 90088ebe2..718755719 100644 --- a/snippets/compose.md +++ b/snippets/compose-functions.md @@ -1,4 +1,4 @@ -### Compose +### Compose functions Use `Array.reduce()` with the spread operator (`...`) to perform right-to-;eft function composition. The last (rightmost) function can accept one or more arguments; the remaining functions must be unary.