lodash-contrib
Version:
The brass buckles on lodash's utility belt
561 lines (407 loc) • 21 kB
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 …</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">¶</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">¶</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 < <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">// => 0</span>
<span class="hljs-keyword">var</span> addAllWithFixedLength = _.arity(<span class="hljs-number">2</span>, addAll);
addAllWithFixedLength.length
<span class="hljs-comment">// => 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">// => 4</span>
</code></pre>
<hr>
</div>
</li>
<li id="section-3">
<div class="annotation">
<div class="pilwrap ">
<a class="pilcrow" href="#section-3">¶</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 < <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">// => 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">// => 2</span>
</code></pre>
<hr>
</div>
</li>
<li id="section-4">
<div class="annotation">
<div class="pilwrap ">
<a class="pilcrow" href="#section-4">¶</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">// => function</span>
curried(<span class="hljs-number">1</span>);
<span class="hljs-comment">// => function</span>
curried(<span class="hljs-number">1</span>)(<span class="hljs-number">2</span>);
<span class="hljs-comment">// => 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">// => 6</span>
</code></pre>
<hr>
</div>
</li>
<li id="section-5">
<div class="annotation">
<div class="pilwrap ">
<a class="pilcrow" href="#section-5">¶</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">// => function</span>
curried(<span class="hljs-number">1</span>);
<span class="hljs-comment">// => function</span>
curried(<span class="hljs-number">1</span>)(<span class="hljs-number">2</span>);
<span class="hljs-comment">// => 3</span>
</code></pre>
<hr>
</div>
</li>
<li id="section-6">
<div class="annotation">
<div class="pilwrap ">
<a class="pilcrow" href="#section-6">¶</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">// => function</span>
curried(<span class="hljs-number">1</span>);
<span class="hljs-comment">// => function</span>
curried(<span class="hljs-number">1</span>)(<span class="hljs-number">2</span>);
<span class="hljs-comment">// => 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">// => 6</span>
</code></pre>
<hr>
</div>
</li>
<li id="section-7">
<div class="annotation">
<div class="pilwrap ">
<a class="pilcrow" href="#section-7">¶</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">// => function</span>
curried(<span class="hljs-number">1</span>);
<span class="hljs-comment">// => function</span>
curried(<span class="hljs-number">1</span>)(<span class="hljs-number">2</span>);
<span class="hljs-comment">// => 2</span>
curried(<span class="hljs-number">2</span>)(<span class="hljs-number">1</span>);
<span class="hljs-comment">// => 0.5</span>
</code></pre>
<hr>
</div>
</li>
<li id="section-8">
<div class="annotation">
<div class="pilwrap ">
<a class="pilcrow" href="#section-8">¶</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 < <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">¶</a>
</div>
<p>}</p>
<p>var curried = _.curryRight2(concat);
// => function</p>
<p>curried(“a”);
// => function</p>
<p>curried(“a”)(“b”);
// => “ba”</p>
<p>```</p>
<hr>
</div>
</li>
<li id="section-10">
<div class="annotation">
<div class="pilwrap ">
<a class="pilcrow" href="#section-10">¶</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 < <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">¶</a>
</div>
<p>}</p>
<p>var curried = _.curryRight3(concat);
// => function</p>
<p>curried(“a”);
// => function</p>
<p>curried(“a”)(“b”);
// => function</p>
<p>curried(“a”)(“b”)(“c”);
// => “cba”</p>
<p>```</p>
<hr>
</div>
</li>
<li id="section-12">
<div class="annotation">
<div class="pilwrap ">
<a class="pilcrow" href="#section-12">¶</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">// => function</span>
fixedFirstAndLast(<span class="hljs-number">2</span>);
<span class="hljs-comment">// => 6</span>
fixedFirstAndLast(<span class="hljs-number">10</span>);
<span class="hljs-comment">// => 14</span>
</code></pre>
<hr>
</div>
</li>
<li id="section-13">
<div class="annotation">
<div class="pilwrap ">
<a class="pilcrow" href="#section-13">¶</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 < <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">// => 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">// => 4</span>
</code></pre>
<hr>
</div>
</li>
<li id="section-14">
<div class="annotation">
<div class="pilwrap ">
<a class="pilcrow" href="#section-14">¶</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 < <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">// => 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">// => 3</span>
</code></pre>
<hr>
</div>
</li>
<li id="section-15">
<div class="annotation">
<div class="pilwrap ">
<a class="pilcrow" href="#section-15">¶</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">// => ["first"]</span>
logOneArg(<span class="hljs-string">"first"</span>, <span class="hljs-string">"second"</span>);
<span class="hljs-comment">// => ["first"]</span>
</code></pre>
<hr>
</div>
</li>
<li id="section-16">
<div class="annotation">
<div class="pilwrap ">
<a class="pilcrow" href="#section-16">¶</a>
</div>
</div>
</li>
</ul>
</div>
</body>
</html>