From 8489af90e2e0062ade37981eb59483867dd06615 Mon Sep 17 00:00:00 2001 From: rodmoioliveira Date: Wed, 20 May 2020 13:58:39 -0300 Subject: [PATCH] add juxt --- snippets/juxt.md | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) create mode 100644 snippets/juxt.md diff --git a/snippets/juxt.md b/snippets/juxt.md new file mode 100644 index 000000000..701aa7109 --- /dev/null +++ b/snippets/juxt.md @@ -0,0 +1,28 @@ +--- +title: juxt +tags: array,function,advanced +--- + +Takes several functions as argument and returns a fn that is the juxtaposition of those fns. + +juxt(fn1, fn2, fn3, ...) use `Array.prototype.map()` to return a `func` that can take a variable number of `args`. +When `func` is called, return a array containing the result of applying each fn (fn1, fn2, fn3, ...) to the `args`. + +```js +const juxt = (...fns) => (...x) => [...fns].map(fn => [...x].map(x => fn(x))); +``` + +```js +juxt( + x => x + 1, + x => x - 1, + x => x * 10, + x => x / 10 +)(1, 2, 3) // => [ [ 2, 3, 4 ], [ 0, 1, 2 ], [ 10, 20, 30 ], [ 0.1, 0.2, 0.3 ] ] + +juxt( + s => s.length, + s => s.split(" ").join("-") +)("30 seconds of code") // => [ [ 18 ], [ '30-seconds-of-code' ] ] + +```