UNPKG

lodash-contrib

Version:

The brass buckles on lodash's utility belt

561 lines (407 loc) 21 kB
<!DOCTYPE html> <html> <head> <title>_.function.arity.js.md</title> <meta http-equiv="content-type" content="text/html; charset=UTF-8"> <meta name="viewport" content="width=device-width, target-densitydpi=160dpi, initial-scale=1.0; maximum-scale=1.0; user-scalable=0;"> <link rel="stylesheet" media="all" href="docco.css" /> </head> <body> <div id="container"> <div id="background"></div> <ul id="jump_to"> <li> <a class="large" href="javascript:void(0);">Jump To &hellip;</a> <a class="small" href="javascript:void(0);">+</a> <div id="jump_wrapper"> <div id="jump_page_wrapper"> <div id="jump_page"> <a class="source" href="_.array.builders.js.html"> _.array.builders.js.md </a> <a class="source" href="_.array.selectors.js.html"> _.array.selectors.js.md </a> <a class="source" href="_.collections.walk.js.html"> _.collections.walk.js.md </a> <a class="source" href="_.function.arity.js.html"> _.function.arity.js.md </a> <a class="source" href="_.function.combinators.js.html"> _.function.combinators.js.md </a> <a class="source" href="_.function.iterators.js.html"> _.function.iterators.js.md </a> <a class="source" href="_.function.predicates.js.html"> _.function.predicates.js.md </a> <a class="source" href="_.object.builders.js.html"> _.object.builders.js.md </a> <a class="source" href="_.object.selectors.js.html"> _.object.selectors.js.md </a> <a class="source" href="_.util.existential.js.html"> _.util.existential.js.md </a> <a class="source" href="_.util.operators.js.html"> _.util.operators.js.md </a> <a class="source" href="_.util.strings.js.html"> _.util.strings.js.md </a> <a class="source" href="_.util.trampolines.js.html"> _.util.trampolines.js.md </a> <a class="source" href="index.html"> index.md </a> </div> </div> </li> </ul> <ul class="sections"> <li id="title"> <div class="annotation"> <h1>_.function.arity.js.md</h1> </div> </li> <li id="section-1"> <div class="annotation"> <div class="pilwrap "> <a class="pilcrow" href="#section-1">&#182;</a> </div> <h3 id="function-arity">function.arity</h3> <blockquote> <p>Functions which manipulate the way functions work with their arguments.</p> </blockquote> <hr> </div> </li> <li id="section-2"> <div class="annotation"> <div class="pilwrap "> <a class="pilcrow" href="#section-2">&#182;</a> </div> <h4 id="arity">arity</h4> <p><strong>Signature:</strong> <code>_.arity(numberOfArgs:Number, fun:Function)</code></p> <p>Returns a new function which is equivalent to <code>fun</code>, except that the new function’s <code>length</code> property is equal to <code>numberOfArgs</code>. This does <strong>not</strong> limit the function to using that number of arguments. It’s only effect is on the reported length.</p> <pre><code class="lang-javascript"><span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">addAll</span>(<span class="hljs-params"></span>) </span>{ <span class="hljs-keyword">var</span> sum = <span class="hljs-number">0</span>; <span class="hljs-keyword">for</span> (<span class="hljs-keyword">var</span> i = <span class="hljs-number">0</span>; i &lt; <span class="hljs-built_in">arguments</span>.length; i++) { sum = sum + <span class="hljs-built_in">arguments</span>[i]; } <span class="hljs-keyword">return</span> sum; } addAll.length <span class="hljs-comment">// =&gt; 0</span> <span class="hljs-keyword">var</span> addAllWithFixedLength = _.arity(<span class="hljs-number">2</span>, addAll); addAllWithFixedLength.length <span class="hljs-comment">// =&gt; 2</span> addAllWithFixedLength(<span class="hljs-number">1</span>, <span class="hljs-number">1</span>, <span class="hljs-number">1</span>, <span class="hljs-number">1</span>); <span class="hljs-comment">// =&gt; 4</span> </code></pre> <hr> </div> </li> <li id="section-3"> <div class="annotation"> <div class="pilwrap "> <a class="pilcrow" href="#section-3">&#182;</a> </div> <h4 id="binary">binary</h4> <p><strong>Signature:</strong> <code>_.binary(fun:Function)</code></p> <p>Returns a new function which accepts only two arguments and passes these arguments to <code>fun</code>. Additional arguments are discarded.</p> <pre><code class="lang-javascript"><span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">addAll</span>(<span class="hljs-params"></span>) </span>{ <span class="hljs-keyword">var</span> sum = <span class="hljs-number">0</span>; <span class="hljs-keyword">for</span> (<span class="hljs-keyword">var</span> i = <span class="hljs-number">0</span>; i &lt; <span class="hljs-built_in">arguments</span>.length; i++) { sum = sum + <span class="hljs-built_in">arguments</span>[i]; } <span class="hljs-keyword">return</span> sum; } <span class="hljs-keyword">var</span> add2 = _.binary(addAll); add2(<span class="hljs-number">1</span>, <span class="hljs-number">1</span>); <span class="hljs-comment">// =&gt; 2</span> add2(<span class="hljs-number">1</span>, <span class="hljs-number">1</span>, <span class="hljs-number">1</span>, <span class="hljs-number">1</span>); <span class="hljs-comment">// =&gt; 2</span> </code></pre> <hr> </div> </li> <li id="section-4"> <div class="annotation"> <div class="pilwrap "> <a class="pilcrow" href="#section-4">&#182;</a> </div> <h4 id="curry">curry</h4> <p><strong>Signature:</strong> <code>_.curry(func:Function[, reverse:Boolean])</code></p> <p>Returns a curried version of <code>func</code>. If <code>reverse</code> is true, arguments will be processed from right to left.</p> <pre><code class="lang-javascript"><span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">add3</span> (<span class="hljs-params">x, y, z</span>) </span>{ <span class="hljs-keyword">return</span> x + y + z; } <span class="hljs-keyword">var</span> curried = _.curry(add3); <span class="hljs-comment">// =&gt; function</span> curried(<span class="hljs-number">1</span>); <span class="hljs-comment">// =&gt; function</span> curried(<span class="hljs-number">1</span>)(<span class="hljs-number">2</span>); <span class="hljs-comment">// =&gt; function</span> curried(<span class="hljs-number">1</span>)(<span class="hljs-number">2</span>)(<span class="hljs-number">3</span>); <span class="hljs-comment">// =&gt; 6</span> </code></pre> <hr> </div> </li> <li id="section-5"> <div class="annotation"> <div class="pilwrap "> <a class="pilcrow" href="#section-5">&#182;</a> </div> <h4 id="curry2">curry2</h4> <p><strong>Signature:</strong> <code>_.curry2(fun:Function)</code></p> <p>Returns a curried version of <code>func</code>, but will curry exactly two arguments, no more or less.</p> <pre><code class="lang-javascript"><span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">add2</span> (<span class="hljs-params">a, b</span>) </span>{ <span class="hljs-keyword">return</span> a + b; } <span class="hljs-keyword">var</span> curried = _.curry2(add2); <span class="hljs-comment">// =&gt; function</span> curried(<span class="hljs-number">1</span>); <span class="hljs-comment">// =&gt; function</span> curried(<span class="hljs-number">1</span>)(<span class="hljs-number">2</span>); <span class="hljs-comment">// =&gt; 3</span> </code></pre> <hr> </div> </li> <li id="section-6"> <div class="annotation"> <div class="pilwrap "> <a class="pilcrow" href="#section-6">&#182;</a> </div> <h4 id="curry3">curry3</h4> <p><strong>Signature:</strong> <code>_.curry3(fun:Function)</code></p> <p>Returns a curried version of <code>func</code>, but will curry exactly three arguments, no more or less.</p> <pre><code class="lang-javascript"><span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">add3</span> (<span class="hljs-params">a, b, c</span>) </span>{ <span class="hljs-keyword">return</span> a + b + c; } <span class="hljs-keyword">var</span> curried = _.curry3(add3); <span class="hljs-comment">// =&gt; function</span> curried(<span class="hljs-number">1</span>); <span class="hljs-comment">// =&gt; function</span> curried(<span class="hljs-number">1</span>)(<span class="hljs-number">2</span>); <span class="hljs-comment">// =&gt; function</span> curried(<span class="hljs-number">1</span>)(<span class="hljs-number">2</span>)(<span class="hljs-number">3</span>); <span class="hljs-comment">// =&gt; 6</span> </code></pre> <hr> </div> </li> <li id="section-7"> <div class="annotation"> <div class="pilwrap "> <a class="pilcrow" href="#section-7">&#182;</a> </div> <h4 id="curryright">curryRight</h4> <p><strong>Signature:</strong> <code>_.curryRight(func:Function)</code></p> <p><strong>Aliases:</strong> <code>_.rCurry</code></p> <p>Returns a curried version of <code>func</code> where arguments are processed from right to left.</p> <pre><code class="lang-javascript"><span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">divide</span> (<span class="hljs-params">a, b</span>) </span>{ <span class="hljs-keyword">return</span> a / b; } <span class="hljs-keyword">var</span> curried = _.curryRight(divide); <span class="hljs-comment">// =&gt; function</span> curried(<span class="hljs-number">1</span>); <span class="hljs-comment">// =&gt; function</span> curried(<span class="hljs-number">1</span>)(<span class="hljs-number">2</span>); <span class="hljs-comment">// =&gt; 2</span> curried(<span class="hljs-number">2</span>)(<span class="hljs-number">1</span>); <span class="hljs-comment">// =&gt; 0.5</span> </code></pre> <hr> </div> </li> <li id="section-8"> <div class="annotation"> <div class="pilwrap "> <a class="pilcrow" href="#section-8">&#182;</a> </div> <h4 id="curryright2">curryRight2</h4> <p><strong>Signature:</strong> <code>_.curryRight2(func:Function)</code></p> <p><strong>Aliases:</strong> <code>_.rcurry2</code></p> <p>Returns a curried version of <code>func</code> where a maxium of two arguments are processed from right to left.</p> <p>```javascript function concat () { var str = “”;</p> </div> <div class="content"><div class='highlight'><pre><span class="hljs-keyword">for</span> (<span class="hljs-keyword">var</span> i = <span class="hljs-number">0</span>; i &lt; <span class="hljs-built_in">arguments</span>.length; i++) { str = str + <span class="hljs-built_in">arguments</span>[i]; } <span class="hljs-keyword">return</span> str;</pre></div></div> </li> <li id="section-9"> <div class="annotation"> <div class="pilwrap "> <a class="pilcrow" href="#section-9">&#182;</a> </div> <p>}</p> <p>var curried = _.curryRight2(concat); // =&gt; function</p> <p>curried(“a”); // =&gt; function</p> <p>curried(“a”)(“b”); // =&gt; “ba”</p> <p>```</p> <hr> </div> </li> <li id="section-10"> <div class="annotation"> <div class="pilwrap "> <a class="pilcrow" href="#section-10">&#182;</a> </div> <h4 id="curryright3">curryRight3</h4> <p><strong>Signature:</strong> <code>_.curryRight3(func:Function)</code></p> <p><strong>Aliases:</strong> <code>_.rcurry3</code></p> <p>Returns a curried version of <code>func</code> where a maxium of three arguments are processed from right to left.</p> <p>```javascript function concat () { var str = “”;</p> </div> <div class="content"><div class='highlight'><pre><span class="hljs-keyword">for</span> (<span class="hljs-keyword">var</span> i = <span class="hljs-number">0</span>; i &lt; <span class="hljs-built_in">arguments</span>.length; i++) { str = str + <span class="hljs-built_in">arguments</span>[i]; } <span class="hljs-keyword">return</span> str;</pre></div></div> </li> <li id="section-11"> <div class="annotation"> <div class="pilwrap "> <a class="pilcrow" href="#section-11">&#182;</a> </div> <p>}</p> <p>var curried = _.curryRight3(concat); // =&gt; function</p> <p>curried(“a”); // =&gt; function</p> <p>curried(“a”)(“b”); // =&gt; function</p> <p>curried(“a”)(“b”)(“c”); // =&gt; “cba”</p> <p>```</p> <hr> </div> </li> <li id="section-12"> <div class="annotation"> <div class="pilwrap "> <a class="pilcrow" href="#section-12">&#182;</a> </div> <h4 id="fix">fix</h4> <p><strong>Signature:</strong> <code>_.fix(fun:Function[, value:Any...])</code></p> <p>Fixes the arguments to a function based on the parameter template defined by the presence of values and the <code>_</code> placeholder.</p> <pre><code class="lang-javascript"><span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">add3</span> (<span class="hljs-params">a, b, c</span>) </span>{ <span class="hljs-keyword">return</span> a + b + c; } <span class="hljs-keyword">var</span> fixedFirstAndLast = _.fix(add3, <span class="hljs-number">1</span>, _, <span class="hljs-number">3</span>); <span class="hljs-comment">// =&gt; function</span> fixedFirstAndLast(<span class="hljs-number">2</span>); <span class="hljs-comment">// =&gt; 6</span> fixedFirstAndLast(<span class="hljs-number">10</span>); <span class="hljs-comment">// =&gt; 14</span> </code></pre> <hr> </div> </li> <li id="section-13"> <div class="annotation"> <div class="pilwrap "> <a class="pilcrow" href="#section-13">&#182;</a> </div> <h4 id="quaternary">quaternary</h4> <p><strong>Signature:</strong> <code>_.quaternary(fun:Function)</code></p> <p>Returns a new function which accepts only four arguments and passes these arguments to <code>fun</code>. Additional arguments are discarded.</p> <pre><code class="lang-javascript"><span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">addAll</span>(<span class="hljs-params"></span>) </span>{ <span class="hljs-keyword">var</span> sum = <span class="hljs-number">0</span>; <span class="hljs-keyword">for</span> (<span class="hljs-keyword">var</span> i = <span class="hljs-number">0</span>; i &lt; <span class="hljs-built_in">arguments</span>.length; i++) { sum = sum + <span class="hljs-built_in">arguments</span>[i]; } <span class="hljs-keyword">return</span> sum; } <span class="hljs-keyword">var</span> add4 = _.quaternary(addAll); add4(<span class="hljs-number">1</span>, <span class="hljs-number">1</span>, <span class="hljs-number">1</span>, <span class="hljs-number">1</span>); <span class="hljs-comment">// =&gt; 4</span> add4(<span class="hljs-number">1</span>, <span class="hljs-number">1</span>, <span class="hljs-number">1</span>, <span class="hljs-number">1</span>, <span class="hljs-number">1</span>, <span class="hljs-number">1</span>); <span class="hljs-comment">// =&gt; 4</span> </code></pre> <hr> </div> </li> <li id="section-14"> <div class="annotation"> <div class="pilwrap "> <a class="pilcrow" href="#section-14">&#182;</a> </div> <h4 id="ternary">ternary</h4> <p><strong>Signature:</strong> <code>_.ternary(fun:Function)</code></p> <p>Returns a new function which accepts only three arguments and passes these arguments to <code>fun</code>. Additional arguments are discarded.</p> <pre><code class="lang-javascript"><span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">addAll</span>(<span class="hljs-params"></span>) </span>{ <span class="hljs-keyword">var</span> sum = <span class="hljs-number">0</span>; <span class="hljs-keyword">for</span> (<span class="hljs-keyword">var</span> i = <span class="hljs-number">0</span>; i &lt; <span class="hljs-built_in">arguments</span>.length; i++) { sum = sum + <span class="hljs-built_in">arguments</span>[i]; } <span class="hljs-keyword">return</span> sum; } <span class="hljs-keyword">var</span> add3 = _.ternary(addAll); add3(<span class="hljs-number">1</span>, <span class="hljs-number">1</span>, <span class="hljs-number">1</span>); <span class="hljs-comment">// =&gt; 3</span> add3(<span class="hljs-number">1</span>, <span class="hljs-number">1</span>, <span class="hljs-number">1</span>, <span class="hljs-number">1</span>, <span class="hljs-number">1</span>, <span class="hljs-number">1</span>); <span class="hljs-comment">// =&gt; 3</span> </code></pre> <hr> </div> </li> <li id="section-15"> <div class="annotation"> <div class="pilwrap "> <a class="pilcrow" href="#section-15">&#182;</a> </div> <h4 id="unary">unary</h4> <p><strong>Signature:</strong> <code>_.unary(fun:Function)</code></p> <p>Returns a new function which accepts only one argument and passes this argument to <code>fun</code>. Additional arguments are discarded.</p> <pre><code class="lang-javascript"><span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">logArgs</span>(<span class="hljs-params"></span>) </span>{ <span class="hljs-built_in">console</span>.log(<span class="hljs-built_in">arguments</span>); } <span class="hljs-keyword">var</span> logOneArg = _.unary(logArgs); logOneArg(<span class="hljs-string">"first"</span>); <span class="hljs-comment">// =&gt; ["first"]</span> logOneArg(<span class="hljs-string">"first"</span>, <span class="hljs-string">"second"</span>); <span class="hljs-comment">// =&gt; ["first"]</span> </code></pre> <hr> </div> </li> <li id="section-16"> <div class="annotation"> <div class="pilwrap "> <a class="pilcrow" href="#section-16">&#182;</a> </div> </div> </li> </ul> </div> </body> </html>