Skip to content

Instantly share code, notes, and snippets.

@kamilogorek
Created October 21, 2013 17:38
Show Gist options
  • Save kamilogorek/7087811 to your computer and use it in GitHub Desktop.
Save kamilogorek/7087811 to your computer and use it in GitHub Desktop.
scoreunder/lodash 1.3.0 diff
<html>
<head>
<title>Scoreunder/LoDash Diff</title>
<style type="text/css">
body {
padding: 2em;
font: 18px Monaco;
}
.add {
background: rgba(0,255,0,0.1);
}
.del {
background: rgba(255,0,0,0.1);
}
table {
width: 100%;
font: 12px Monaco;
border-spacing:0;
border-collapse: collapse;
}
td {
border-bottom: 1px solid #ccc;
border-top: 1px solid #ccc;
}
</style>
</head>
<body>
<h1>Scoreunder/LoDash 1.3.0 Diff</h1>
<table>
<tbody id="res"><tr><td class="codekolom">1</td><td class="codekolom">1</td><td class="bredecode"> /**</td></tr><tr><td class="codekolom">2</td><td class="codekolom">2</td><td class="bredecode"> * @license</td></tr><tr><td class="codekolom">3</td><td class="codekolom">3</td><td class="bredecode"> * Lo-Dash 1.3.0 (Custom Build) &lt;http://lodash.com/&gt;</td></tr><tr><td class="codekolom">4</td><td class="codekolom">4</td><td class="bredecode"> * Build: `lodash modern -o ./dist/lodash.js`</td></tr><tr><td class="codekolom">5</td><td class="codekolom">5</td><td class="bredecode"> * Copyright 2012-2013 The Dojo Foundation &lt;http://dojofoundation.org/&gt;</td></tr><tr><td class="codekolom">6</td><td class="codekolom">6</td><td class="bredecode"> * Based on Underscore.js 1.4.4 &lt;http://underscorejs.org/&gt;</td></tr><tr><td class="codekolom">7</td><td class="codekolom">7</td><td class="bredecode"> * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud Inc.</td></tr><tr><td class="codekolom">8</td><td class="codekolom">8</td><td class="bredecode"> * Available under MIT license &lt;http://lodash.com/license&gt;</td></tr><tr><td class="codekolom">9</td><td class="codekolom">9</td><td class="bredecode"> */</td></tr><tr><td class="codekolom">10</td><td class="codekolom">10</td><td class="bredecode"> ;(function(window) {</td></tr><tr><td class="codekolom">11</td><td class="codekolom">11</td><td class="bredecode"> </td></tr><tr><td class="codekolom">12</td><td class="codekolom">12</td><td class="bredecode"> /** Used as a safe reference for `undefined` in pre ES5 environments */</td></tr><tr><td class="codekolom">13</td><td class="codekolom">13</td><td class="bredecode"> var undefined;</td></tr><tr><td class="codekolom">14</td><td class="codekolom">14</td><td class="bredecode"> </td></tr><tr><td class="codekolom">15</td><td class="codekolom">15</td><td class="bredecode"> /** Used to pool arrays and objects used internally */</td></tr><tr><td class="codekolom">16</td><td class="codekolom">16</td><td class="bredecode"> var arrayPool = [],</td></tr><tr><td class="codekolom">17</td><td class="codekolom">17</td><td class="bredecode"> objectPool = [];</td></tr><tr><td class="codekolom">18</td><td class="codekolom">18</td><td class="bredecode"> </td></tr><tr><td class="codekolom">19</td><td class="codekolom">19</td><td class="bredecode"> /** Used to generate unique IDs */</td></tr><tr><td class="codekolom">20</td><td class="codekolom">20</td><td class="bredecode"> var idCounter = 0;</td></tr><tr><td class="codekolom">21</td><td class="codekolom">21</td><td class="bredecode"> </td></tr><tr><td class="codekolom">22</td><td class="codekolom">22</td><td class="bredecode"> /** Used internally to indicate various things */</td></tr><tr><td class="codekolom">23</td><td class="codekolom">23</td><td class="bredecode"> var indicatorObject = {};</td></tr><tr><td class="codekolom">24</td><td class="codekolom">24</td><td class="bredecode"> </td></tr><tr><td class="codekolom">25</td><td class="codekolom">25</td><td class="bredecode"> /** Used to prefix keys to avoid issues with `__proto__` and properties on `Object.prototype` */</td></tr><tr><td class="codekolom">26</td><td class="codekolom">26</td><td class="bredecode"> var keyPrefix = +new Date + '';</td></tr><tr><td class="codekolom">27</td><td class="codekolom">27</td><td class="bredecode"> </td></tr><tr><td class="codekolom">28</td><td class="codekolom">28</td><td class="bredecode"> /** Used as the size when optimizations are enabled for large arrays */</td></tr><tr><td class="codekolom">29</td><td class="codekolom">29</td><td class="bredecode"> var largeArraySize = 75;</td></tr><tr><td class="codekolom">30</td><td class="codekolom">30</td><td class="bredecode"> </td></tr><tr><td class="codekolom">31</td><td class="codekolom">31</td><td class="bredecode"> /** Used as the max size of the `arrayPool` and `objectPool` */</td></tr><tr><td class="codekolom">32</td><td class="codekolom">32</td><td class="bredecode"> var maxPoolSize = 10;</td></tr><tr><td class="codekolom">33</td><td class="codekolom">33</td><td class="bredecode"> </td></tr><tr><td class="codekolom">34</td><td class="codekolom">34</td><td class="bredecode"> /** Used to match empty string literals in compiled template source */</td></tr><tr><td class="codekolom">35</td><td class="codekolom">35</td><td class="bredecode"> var reEmptyStringLeading = /\b__p \+= '';/g,</td></tr><tr><td class="codekolom">36</td><td class="codekolom">36</td><td class="bredecode"> reEmptyStringMiddle = /\b(__p \+=) '' \+/g,</td></tr><tr><td class="codekolom">37</td><td class="codekolom">37</td><td class="bredecode"> reEmptyStringTrailing = /(__e\(.*?\)|\b__t\)) \+\n'';/g;</td></tr><tr><td class="codekolom">38</td><td class="codekolom">38</td><td class="bredecode"> </td></tr><tr><td class="codekolom">39</td><td class="codekolom">39</td><td class="bredecode"> /** Used to match HTML entities */</td></tr><tr><td class="codekolom">40</td><td class="codekolom">40</td><td class="bredecode"> var reEscapedHtml = /&amp;(?:amp|lt|gt|quot|#39);/g;</td></tr><tr><td class="codekolom">41</td><td class="codekolom">41</td><td class="bredecode"> </td></tr><tr><td class="codekolom">42</td><td class="codekolom">42</td><td class="bredecode"> /**</td></tr><tr><td class="codekolom">43</td><td class="codekolom">43</td><td class="bredecode"> * Used to match ES6 template delimiters</td></tr><tr><td class="codekolom">44</td><td class="codekolom">44</td><td class="bredecode"> * http://people.mozilla.org/~jorendorff/es6-draft.html#sec-7.8.6</td></tr><tr><td class="codekolom">45</td><td class="codekolom">45</td><td class="bredecode"> */</td></tr><tr><td class="codekolom">46</td><td class="codekolom">46</td><td class="bredecode"> var reEsTemplate = /\$\{([^\\}]*(?:\\.[^\\}]*)*)\}/g;</td></tr><tr><td class="codekolom">47</td><td class="codekolom">47</td><td class="bredecode"> </td></tr><tr><td class="codekolom">48</td><td class="codekolom">48</td><td class="bredecode"> /** Used to match regexp flags from their coerced string values */</td></tr><tr><td class="codekolom">49</td><td class="codekolom">49</td><td class="bredecode"> var reFlags = /\w*$/;</td></tr><tr><td class="codekolom">50</td><td class="codekolom">50</td><td class="bredecode"> </td></tr><tr><td class="codekolom">51</td><td class="codekolom">51</td><td class="bredecode"> /** Used to match "interpolate" template delimiters */</td></tr><tr><td class="codekolom">52</td><td class="codekolom">52</td><td class="bredecode"> var reInterpolate = /&lt;%=([\s\S]+?)%&gt;/g;</td></tr><tr><td class="codekolom">53</td><td class="codekolom">53</td><td class="bredecode"> </td></tr><tr><td class="codekolom">54</td><td class="codekolom">54</td><td class="bredecode"> /** Used to detect functions containing a `this` reference */</td></tr><tr><td class="codekolom">55</td><td class="codekolom">55</td><td class="bredecode"> var reThis = (reThis = /\bthis\b/) &amp;&amp; reThis.test(runInContext) &amp;&amp; reThis;</td></tr><tr><td class="codekolom">56</td><td class="codekolom">56</td><td class="bredecode"> </td></tr><tr><td class="codekolom">57</td><td class="codekolom">57</td><td class="bredecode"> /** Used to detect and test whitespace */</td></tr><tr><td class="codekolom">58</td><td class="codekolom">58</td><td class="bredecode"> var whitespace = (</td></tr><tr><td class="codekolom">59</td><td class="codekolom">59</td><td class="bredecode"> // whitespace</td></tr><tr><td class="codekolom">60</td><td class="codekolom">60</td><td class="bredecode"> ' \t\x0B\f\xA0\ufeff' +</td></tr><tr><td class="codekolom">61</td><td class="codekolom">61</td><td class="bredecode"> </td></tr><tr><td class="codekolom">62</td><td class="codekolom">62</td><td class="bredecode"> // line terminators</td></tr><tr><td class="codekolom">63</td><td class="codekolom">63</td><td class="bredecode"> '\n\r\u2028\u2029' +</td></tr><tr><td class="codekolom">64</td><td class="codekolom">64</td><td class="bredecode"> </td></tr><tr><td class="codekolom">65</td><td class="codekolom">65</td><td class="bredecode"> // unicode category "Zs" space separators</td></tr><tr><td class="codekolom">66</td><td class="codekolom">66</td><td class="bredecode"> '\u1680\u180e\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u202f\u205f\u3000'</td></tr><tr><td class="codekolom">67</td><td class="codekolom">67</td><td class="bredecode"> );</td></tr><tr><td class="codekolom">68</td><td class="codekolom">68</td><td class="bredecode"> </td></tr><tr><td class="codekolom">69</td><td class="codekolom">69</td><td class="bredecode"> /** Used to match leading whitespace and zeros to be removed */</td></tr><tr><td class="codekolom">70</td><td class="codekolom">70</td><td class="bredecode"> var reLeadingSpacesAndZeros = RegExp('^[' + whitespace + ']*0+(?=.$)');</td></tr><tr><td class="codekolom">71</td><td class="codekolom">71</td><td class="bredecode"> </td></tr><tr><td class="codekolom">72</td><td class="codekolom">72</td><td class="bredecode"> /** Used to ensure capturing order of template delimiters */</td></tr><tr><td class="codekolom">73</td><td class="codekolom">73</td><td class="bredecode"> var reNoMatch = /($^)/;</td></tr><tr><td class="codekolom">74</td><td class="codekolom">74</td><td class="bredecode"> </td></tr><tr><td class="codekolom">75</td><td class="codekolom">75</td><td class="bredecode"> /** Used to match HTML characters */</td></tr><tr><td class="codekolom">76</td><td class="codekolom">76</td><td class="bredecode"> var reUnescapedHtml = /[&amp;&lt;&gt;"']/g;</td></tr><tr><td class="codekolom">77</td><td class="codekolom">77</td><td class="bredecode"> </td></tr><tr><td class="codekolom">78</td><td class="codekolom">78</td><td class="bredecode"> /** Used to match unescaped characters in compiled string literals */</td></tr><tr><td class="codekolom">79</td><td class="codekolom">79</td><td class="bredecode"> var reUnescapedString = /['\n\r\t\u2028\u2029\\]/g;</td></tr><tr><td class="codekolom">80</td><td class="codekolom">80</td><td class="bredecode"> </td></tr><tr><td class="codekolom">81</td><td class="codekolom">81</td><td class="bredecode"> /** Used to assign default `context` object properties */</td></tr><tr><td class="codekolom">82</td><td class="codekolom">82</td><td class="bredecode"> var contextProps = [</td></tr><tr><td class="codekolom">83</td><td class="codekolom">83</td><td class="bredecode"> 'Array', 'Boolean', 'Date', 'Function', 'Math', 'Number', 'Object',</td></tr><tr><td class="codekolom">84</td><td class="codekolom">84</td><td class="bredecode"> 'RegExp', 'String', '_', 'attachEvent', 'clearTimeout', 'isFinite', 'isNaN',</td></tr><tr><td class="codekolom">85</td><td class="codekolom">85</td><td class="bredecode"> 'parseInt', 'setImmediate', 'setTimeout'</td></tr><tr><td class="codekolom">86</td><td class="codekolom">86</td><td class="bredecode"> ];</td></tr><tr><td class="codekolom">87</td><td class="codekolom">87</td><td class="bredecode"> </td></tr><tr><td class="codekolom">88</td><td class="codekolom">88</td><td class="bredecode"> /** Used to make template sourceURLs easier to identify */</td></tr><tr><td class="codekolom">89</td><td class="codekolom">89</td><td class="bredecode"> var templateCounter = 0;</td></tr><tr><td class="codekolom">90</td><td class="codekolom">90</td><td class="bredecode"> </td></tr><tr><td class="codekolom">91</td><td class="codekolom">91</td><td class="bredecode"> /** `Object#toString` result shortcuts */</td></tr><tr><td class="codekolom">92</td><td class="codekolom">92</td><td class="bredecode"> var argsClass = '[object Arguments]',</td></tr><tr><td class="codekolom">93</td><td class="codekolom">93</td><td class="bredecode"> arrayClass = '[object Array]',</td></tr><tr><td class="codekolom">94</td><td class="codekolom">94</td><td class="bredecode"> boolClass = '[object Boolean]',</td></tr><tr><td class="codekolom">95</td><td class="codekolom">95</td><td class="bredecode"> dateClass = '[object Date]',</td></tr><tr><td class="codekolom">96</td><td class="codekolom">96</td><td class="bredecode"> errorClass = '[object Error]',</td></tr><tr><td class="codekolom">97</td><td class="codekolom">97</td><td class="bredecode"> funcClass = '[object Function]',</td></tr><tr><td class="codekolom">98</td><td class="codekolom">98</td><td class="bredecode"> numberClass = '[object Number]',</td></tr><tr><td class="codekolom">99</td><td class="codekolom">99</td><td class="bredecode"> objectClass = '[object Object]',</td></tr><tr><td class="codekolom">100</td><td class="codekolom">100</td><td class="bredecode"> regexpClass = '[object RegExp]',</td></tr><tr><td class="codekolom">101</td><td class="codekolom">101</td><td class="bredecode"> stringClass = '[object String]';</td></tr><tr><td class="codekolom">102</td><td class="codekolom">102</td><td class="bredecode"> </td></tr><tr><td class="codekolom">103</td><td class="codekolom">103</td><td class="bredecode"> /** Used to identify object classifications that `_.clone` supports */</td></tr><tr><td class="codekolom">104</td><td class="codekolom">104</td><td class="bredecode"> var cloneableClasses = {};</td></tr><tr><td class="codekolom">105</td><td class="codekolom">105</td><td class="bredecode"> cloneableClasses[funcClass] = false;</td></tr><tr><td class="codekolom">106</td><td class="codekolom">106</td><td class="bredecode"> cloneableClasses[argsClass] = cloneableClasses[arrayClass] =</td></tr><tr><td class="codekolom">107</td><td class="codekolom">107</td><td class="bredecode"> cloneableClasses[boolClass] = cloneableClasses[dateClass] =</td></tr><tr><td class="codekolom">108</td><td class="codekolom">108</td><td class="bredecode"> cloneableClasses[numberClass] = cloneableClasses[objectClass] =</td></tr><tr><td class="codekolom">109</td><td class="codekolom">109</td><td class="bredecode"> cloneableClasses[regexpClass] = cloneableClasses[stringClass] = true;</td></tr><tr><td class="codekolom">110</td><td class="codekolom">110</td><td class="bredecode"> </td></tr><tr><td class="codekolom">111</td><td class="codekolom">111</td><td class="bredecode"> /** Used to determine if values are of the language type Object */</td></tr><tr><td class="codekolom">112</td><td class="codekolom">112</td><td class="bredecode"> var objectTypes = {</td></tr><tr><td class="codekolom">113</td><td class="codekolom">113</td><td class="bredecode"> 'boolean': false,</td></tr><tr><td class="codekolom">114</td><td class="codekolom">114</td><td class="bredecode"> 'function': true,</td></tr><tr><td class="codekolom">115</td><td class="codekolom">115</td><td class="bredecode"> 'object': true,</td></tr><tr><td class="codekolom">116</td><td class="codekolom">116</td><td class="bredecode"> 'number': false,</td></tr><tr><td class="codekolom">117</td><td class="codekolom">117</td><td class="bredecode"> 'string': false,</td></tr><tr><td class="codekolom">118</td><td class="codekolom">118</td><td class="bredecode"> 'undefined': false</td></tr><tr><td class="codekolom">119</td><td class="codekolom">119</td><td class="bredecode"> };</td></tr><tr><td class="codekolom">120</td><td class="codekolom">120</td><td class="bredecode"> </td></tr><tr><td class="codekolom">121</td><td class="codekolom">121</td><td class="bredecode"> /** Used to escape characters for inclusion in compiled string literals */</td></tr><tr><td class="codekolom">122</td><td class="codekolom">122</td><td class="bredecode"> var stringEscapes = {</td></tr><tr><td class="codekolom">123</td><td class="codekolom">123</td><td class="bredecode"> '\\': '\\',</td></tr><tr><td class="codekolom">124</td><td class="codekolom">124</td><td class="bredecode"> "'": "'",</td></tr><tr><td class="codekolom">125</td><td class="codekolom">125</td><td class="bredecode"> '\n': 'n',</td></tr><tr><td class="codekolom">126</td><td class="codekolom">126</td><td class="bredecode"> '\r': 'r',</td></tr><tr><td class="codekolom">127</td><td class="codekolom">127</td><td class="bredecode"> '\t': 't',</td></tr><tr><td class="codekolom">128</td><td class="codekolom">128</td><td class="bredecode"> '\u2028': 'u2028',</td></tr><tr><td class="codekolom">129</td><td class="codekolom">129</td><td class="bredecode"> '\u2029': 'u2029'</td></tr><tr><td class="codekolom">130</td><td class="codekolom">130</td><td class="bredecode"> };</td></tr><tr class="add"><td class="codekolom"></td><td class="codekolom">131</td><td class="bredecode">+ </td></tr><tr class="add"><td class="codekolom"></td><td class="codekolom">132</td><td class="bredecode">+ (function() {</td></tr><tr class="add"><td class="codekolom"></td><td class="codekolom">133</td><td class="bredecode">+ //+ slice :: a -&gt; [b]</td></tr><tr class="add"><td class="codekolom"></td><td class="codekolom">134</td><td class="bredecode">+ var slice = Array.prototype.slice</td></tr><tr class="add"><td class="codekolom"></td><td class="codekolom">135</td><td class="bredecode">+ </td></tr><tr class="add"><td class="codekolom"></td><td class="codekolom">136</td><td class="bredecode">+ //+ toArray :: a -&gt; [b]</td></tr><tr class="add"><td class="codekolom"></td><td class="codekolom">137</td><td class="bredecode">+ , toArray = function(x) {</td></tr><tr class="add"><td class="codekolom"></td><td class="codekolom">138</td><td class="bredecode">+ return slice.call(x);</td></tr><tr class="add"><td class="codekolom"></td><td class="codekolom">139</td><td class="bredecode">+ }</td></tr><tr class="add"><td class="codekolom"></td><td class="codekolom">140</td><td class="bredecode">+ </td></tr><tr class="add"><td class="codekolom"></td><td class="codekolom">141</td><td class="bredecode">+ //- altered from from wu.js</td></tr><tr class="add"><td class="codekolom"></td><td class="codekolom">142</td><td class="bredecode">+ //+ curry :: f</td></tr><tr class="add"><td class="codekolom"></td><td class="codekolom">143</td><td class="bredecode">+ , curry = function (fn /* variadic number of args */) {</td></tr><tr class="add"><td class="codekolom"></td><td class="codekolom">144</td><td class="bredecode">+ var args = Array.prototype.slice.call(arguments, 1);</td></tr><tr class="add"><td class="codekolom"></td><td class="codekolom">145</td><td class="bredecode">+ var f = function () {</td></tr><tr class="add"><td class="codekolom"></td><td class="codekolom">146</td><td class="bredecode">+ return fn.apply(this, args.concat(toArray(arguments)));</td></tr><tr class="add"><td class="codekolom"></td><td class="codekolom">147</td><td class="bredecode">+ };</td></tr><tr class="add"><td class="codekolom"></td><td class="codekolom">148</td><td class="bredecode">+ return f;</td></tr><tr class="add"><td class="codekolom"></td><td class="codekolom">149</td><td class="bredecode">+ }</td></tr><tr class="add"><td class="codekolom"></td><td class="codekolom">150</td><td class="bredecode">+ </td></tr><tr class="add"><td class="codekolom"></td><td class="codekolom">151</td><td class="bredecode">+ //+ autoCurry :: f -&gt; Int -&gt; f</td></tr><tr class="add"><td class="codekolom"></td><td class="codekolom">152</td><td class="bredecode">+ , autoCurry = function (fn, numArgs) {</td></tr><tr class="add"><td class="codekolom"></td><td class="codekolom">153</td><td class="bredecode">+ numArgs = numArgs || fn.length;</td></tr><tr class="add"><td class="codekolom"></td><td class="codekolom">154</td><td class="bredecode">+ var f = function () {</td></tr><tr class="add"><td class="codekolom"></td><td class="codekolom">155</td><td class="bredecode">+ if (arguments.length &lt; numArgs) {</td></tr><tr class="add"><td class="codekolom"></td><td class="codekolom">156</td><td class="bredecode">+ return numArgs - arguments.length &gt; 0 ?</td></tr><tr class="add"><td class="codekolom"></td><td class="codekolom">157</td><td class="bredecode">+ autoCurry(curry.apply(this, [fn].concat(toArray(arguments))),</td></tr><tr class="add"><td class="codekolom"></td><td class="codekolom">158</td><td class="bredecode">+ numArgs - arguments.length) :</td></tr><tr class="add"><td class="codekolom"></td><td class="codekolom">159</td><td class="bredecode">+ curry.apply(this, [fn].concat(toArray(arguments)));</td></tr><tr class="add"><td class="codekolom"></td><td class="codekolom">160</td><td class="bredecode">+ } else {</td></tr><tr class="add"><td class="codekolom"></td><td class="codekolom">161</td><td class="bredecode">+ return fn.apply(this, arguments);</td></tr><tr class="add"><td class="codekolom"></td><td class="codekolom">162</td><td class="bredecode">+ }</td></tr><tr class="add"><td class="codekolom"></td><td class="codekolom">163</td><td class="bredecode">+ };</td></tr><tr class="add"><td class="codekolom"></td><td class="codekolom">164</td><td class="bredecode">+ f.toString = function(){ return fn.toString(); };</td></tr><tr class="add"><td class="codekolom"></td><td class="codekolom">165</td><td class="bredecode">+ f.curried = true;</td></tr><tr class="add"><td class="codekolom"></td><td class="codekolom">166</td><td class="bredecode">+ return f;</td></tr><tr class="add"><td class="codekolom"></td><td class="codekolom">167</td><td class="bredecode">+ }</td></tr><tr class="add"><td class="codekolom"></td><td class="codekolom">168</td><td class="bredecode">+ </td></tr><tr class="add"><td class="codekolom"></td><td class="codekolom">169</td><td class="bredecode">+ //+ decorateFunctionPrototypeWithAutoCurry :: IO</td></tr><tr class="add"><td class="codekolom"></td><td class="codekolom">170</td><td class="bredecode">+ , decorateFunctionPrototypeWithAutoCurry = (function() {</td></tr><tr class="add"><td class="codekolom"></td><td class="codekolom">171</td><td class="bredecode">+ Function.prototype.autoCurry = function(n) {</td></tr><tr class="add"><td class="codekolom"></td><td class="codekolom">172</td><td class="bredecode">+ return autoCurry(this, n);</td></tr><tr class="add"><td class="codekolom"></td><td class="codekolom">173</td><td class="bredecode">+ };</td></tr><tr class="add"><td class="codekolom"></td><td class="codekolom">174</td><td class="bredecode">+ })();</td></tr><tr class="add"><td class="codekolom"></td><td class="codekolom">175</td><td class="bredecode">+ })();</td></tr><tr class="add"><td class="codekolom"></td><td class="codekolom">176</td><td class="bredecode">+ </td></tr><tr><td class="codekolom">131</td><td class="codekolom">177</td><td class="bredecode"> </td></tr><tr><td class="codekolom">132</td><td class="codekolom">178</td><td class="bredecode"> /** Detect free variable `exports` */</td></tr><tr><td class="codekolom">133</td><td class="codekolom">179</td><td class="bredecode"> var freeExports = objectTypes[typeof exports] &amp;&amp; exports;</td></tr><tr><td class="codekolom">134</td><td class="codekolom">180</td><td class="bredecode"> </td></tr><tr><td class="codekolom">135</td><td class="codekolom">181</td><td class="bredecode"> /** Detect free variable `module` */</td></tr><tr><td class="codekolom">136</td><td class="codekolom">182</td><td class="bredecode"> var freeModule = objectTypes[typeof module] &amp;&amp; module &amp;&amp; module.exports == freeExports &amp;&amp; module;</td></tr><tr><td class="codekolom">137</td><td class="codekolom">183</td><td class="bredecode"> </td></tr><tr><td class="codekolom">138</td><td class="codekolom">184</td><td class="bredecode"> /** Detect free variable `global`, from Node.js or Browserified code, and use it as `window` */</td></tr><tr><td class="codekolom">139</td><td class="codekolom">185</td><td class="bredecode"> var freeGlobal = objectTypes[typeof global] &amp;&amp; global;</td></tr><tr><td class="codekolom">140</td><td class="codekolom">186</td><td class="bredecode"> if (freeGlobal &amp;&amp; (freeGlobal.global === freeGlobal || freeGlobal.window === freeGlobal)) {</td></tr><tr><td class="codekolom">141</td><td class="codekolom">187</td><td class="bredecode"> window = freeGlobal;</td></tr><tr><td class="codekolom">142</td><td class="codekolom">188</td><td class="bredecode"> }</td></tr><tr><td class="codekolom">143</td><td class="codekolom">189</td><td class="bredecode"> </td></tr><tr><td class="codekolom">144</td><td class="codekolom">190</td><td class="bredecode"> /*--------------------------------------------------------------------------*/</td></tr><tr><td class="codekolom">145</td><td class="codekolom">191</td><td class="bredecode"> </td></tr><tr><td class="codekolom">146</td><td class="codekolom">192</td><td class="bredecode"> /**</td></tr><tr><td class="codekolom">147</td><td class="codekolom">193</td><td class="bredecode"> * A basic implementation of `_.indexOf` without support for binary searches</td></tr><tr><td class="codekolom">148</td><td class="codekolom">194</td><td class="bredecode"> * or `fromIndex` constraints.</td></tr><tr><td class="codekolom">149</td><td class="codekolom">195</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">150</td><td class="codekolom">196</td><td class="bredecode"> * @private</td></tr><tr><td class="codekolom">151</td><td class="codekolom">197</td><td class="bredecode"> * @param {Array} array The array to search.</td></tr><tr><td class="codekolom">152</td><td class="codekolom">198</td><td class="bredecode"> * @param {Mixed} value The value to search for.</td></tr><tr><td class="codekolom">153</td><td class="codekolom">199</td><td class="bredecode"> * @param {Number} [fromIndex=0] The index to search from.</td></tr><tr><td class="codekolom">154</td><td class="codekolom">200</td><td class="bredecode"> * @returns {Number} Returns the index of the matched value or `-1`.</td></tr><tr><td class="codekolom">155</td><td class="codekolom">201</td><td class="bredecode"> */</td></tr><tr><td class="codekolom">156</td><td class="codekolom">202</td><td class="bredecode"> function basicIndexOf(array, value, fromIndex) {</td></tr><tr><td class="codekolom">157</td><td class="codekolom">203</td><td class="bredecode"> var index = (fromIndex || 0) - 1,</td></tr><tr><td class="codekolom">158</td><td class="codekolom">204</td><td class="bredecode"> length = array.length;</td></tr><tr><td class="codekolom">159</td><td class="codekolom">205</td><td class="bredecode"> </td></tr><tr><td class="codekolom">160</td><td class="codekolom">206</td><td class="bredecode"> while (++index &lt; length) {</td></tr><tr><td class="codekolom">161</td><td class="codekolom">207</td><td class="bredecode"> if (array[index] === value) {</td></tr><tr><td class="codekolom">162</td><td class="codekolom">208</td><td class="bredecode"> return index;</td></tr><tr><td class="codekolom">163</td><td class="codekolom">209</td><td class="bredecode"> }</td></tr><tr><td class="codekolom">164</td><td class="codekolom">210</td><td class="bredecode"> }</td></tr><tr><td class="codekolom">165</td><td class="codekolom">211</td><td class="bredecode"> return -1;</td></tr><tr><td class="codekolom">166</td><td class="codekolom">212</td><td class="bredecode"> }</td></tr><tr><td class="codekolom">167</td><td class="codekolom">213</td><td class="bredecode"> </td></tr><tr><td class="codekolom">168</td><td class="codekolom">214</td><td class="bredecode"> /**</td></tr><tr><td class="codekolom">169</td><td class="codekolom">215</td><td class="bredecode"> * An implementation of `_.contains` for cache objects that mimics the return</td></tr><tr><td class="codekolom">170</td><td class="codekolom">216</td><td class="bredecode"> * signature of `_.indexOf` by returning `0` if the value is found, else `-1`.</td></tr><tr><td class="codekolom">171</td><td class="codekolom">217</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">172</td><td class="codekolom">218</td><td class="bredecode"> * @private</td></tr><tr><td class="codekolom">173</td><td class="codekolom">219</td><td class="bredecode"> * @param {Object} cache The cache object to inspect.</td></tr><tr><td class="codekolom">174</td><td class="codekolom">220</td><td class="bredecode"> * @param {Mixed} value The value to search for.</td></tr><tr><td class="codekolom">175</td><td class="codekolom">221</td><td class="bredecode"> * @returns {Number} Returns `0` if `value` is found, else `-1`.</td></tr><tr><td class="codekolom">176</td><td class="codekolom">222</td><td class="bredecode"> */</td></tr><tr><td class="codekolom">177</td><td class="codekolom">223</td><td class="bredecode"> function cacheIndexOf(cache, value) {</td></tr><tr><td class="codekolom">178</td><td class="codekolom">224</td><td class="bredecode"> var type = typeof value;</td></tr><tr><td class="codekolom">179</td><td class="codekolom">225</td><td class="bredecode"> cache = cache.cache;</td></tr><tr><td class="codekolom">180</td><td class="codekolom">226</td><td class="bredecode"> </td></tr><tr><td class="codekolom">181</td><td class="codekolom">227</td><td class="bredecode"> if (type == 'boolean' || value == null) {</td></tr><tr><td class="codekolom">182</td><td class="codekolom">228</td><td class="bredecode"> return cache[value];</td></tr><tr><td class="codekolom">183</td><td class="codekolom">229</td><td class="bredecode"> }</td></tr><tr><td class="codekolom">184</td><td class="codekolom">230</td><td class="bredecode"> if (type != 'number' &amp;&amp; type != 'string') {</td></tr><tr><td class="codekolom">185</td><td class="codekolom">231</td><td class="bredecode"> type = 'object';</td></tr><tr><td class="codekolom">186</td><td class="codekolom">232</td><td class="bredecode"> }</td></tr><tr><td class="codekolom">187</td><td class="codekolom">233</td><td class="bredecode"> var key = type == 'number' ? value : keyPrefix + value;</td></tr><tr><td class="codekolom">188</td><td class="codekolom">234</td><td class="bredecode"> cache = cache[type] || (cache[type] = {});</td></tr><tr><td class="codekolom">189</td><td class="codekolom">235</td><td class="bredecode"> </td></tr><tr><td class="codekolom">190</td><td class="codekolom">236</td><td class="bredecode"> return type == 'object'</td></tr><tr><td class="codekolom">191</td><td class="codekolom">237</td><td class="bredecode"> ? (cache[key] &amp;&amp; basicIndexOf(cache[key], value) &gt; -1 ? 0 : -1)</td></tr><tr><td class="codekolom">192</td><td class="codekolom">238</td><td class="bredecode"> : (cache[key] ? 0 : -1);</td></tr><tr><td class="codekolom">193</td><td class="codekolom">239</td><td class="bredecode"> }</td></tr><tr><td class="codekolom">194</td><td class="codekolom">240</td><td class="bredecode"> </td></tr><tr><td class="codekolom">195</td><td class="codekolom">241</td><td class="bredecode"> /**</td></tr><tr><td class="codekolom">196</td><td class="codekolom">242</td><td class="bredecode"> * Adds a given `value` to the corresponding cache object.</td></tr><tr><td class="codekolom">197</td><td class="codekolom">243</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">198</td><td class="codekolom">244</td><td class="bredecode"> * @private</td></tr><tr><td class="codekolom">199</td><td class="codekolom">245</td><td class="bredecode"> * @param {Mixed} value The value to add to the cache.</td></tr><tr><td class="codekolom">200</td><td class="codekolom">246</td><td class="bredecode"> */</td></tr><tr><td class="codekolom">201</td><td class="codekolom">247</td><td class="bredecode"> function cachePush(value) {</td></tr><tr><td class="codekolom">202</td><td class="codekolom">248</td><td class="bredecode"> var cache = this.cache,</td></tr><tr><td class="codekolom">203</td><td class="codekolom">249</td><td class="bredecode"> type = typeof value;</td></tr><tr><td class="codekolom">204</td><td class="codekolom">250</td><td class="bredecode"> </td></tr><tr><td class="codekolom">205</td><td class="codekolom">251</td><td class="bredecode"> if (type == 'boolean' || value == null) {</td></tr><tr><td class="codekolom">206</td><td class="codekolom">252</td><td class="bredecode"> cache[value] = true;</td></tr><tr><td class="codekolom">207</td><td class="codekolom">253</td><td class="bredecode"> } else {</td></tr><tr><td class="codekolom">208</td><td class="codekolom">254</td><td class="bredecode"> if (type != 'number' &amp;&amp; type != 'string') {</td></tr><tr><td class="codekolom">209</td><td class="codekolom">255</td><td class="bredecode"> type = 'object';</td></tr><tr><td class="codekolom">210</td><td class="codekolom">256</td><td class="bredecode"> }</td></tr><tr><td class="codekolom">211</td><td class="codekolom">257</td><td class="bredecode"> var key = type == 'number' ? value : keyPrefix + value,</td></tr><tr><td class="codekolom">212</td><td class="codekolom">258</td><td class="bredecode"> typeCache = cache[type] || (cache[type] = {});</td></tr><tr><td class="codekolom">213</td><td class="codekolom">259</td><td class="bredecode"> </td></tr><tr><td class="codekolom">214</td><td class="codekolom">260</td><td class="bredecode"> if (type == 'object') {</td></tr><tr><td class="codekolom">215</td><td class="codekolom">261</td><td class="bredecode"> if ((typeCache[key] || (typeCache[key] = [])).push(value) == this.array.length) {</td></tr><tr><td class="codekolom">216</td><td class="codekolom">262</td><td class="bredecode"> cache[type] = false;</td></tr><tr><td class="codekolom">217</td><td class="codekolom">263</td><td class="bredecode"> }</td></tr><tr><td class="codekolom">218</td><td class="codekolom">264</td><td class="bredecode"> } else {</td></tr><tr><td class="codekolom">219</td><td class="codekolom">265</td><td class="bredecode"> typeCache[key] = true;</td></tr><tr><td class="codekolom">220</td><td class="codekolom">266</td><td class="bredecode"> }</td></tr><tr><td class="codekolom">221</td><td class="codekolom">267</td><td class="bredecode"> }</td></tr><tr><td class="codekolom">222</td><td class="codekolom">268</td><td class="bredecode"> }</td></tr><tr><td class="codekolom">223</td><td class="codekolom">269</td><td class="bredecode"> </td></tr><tr><td class="codekolom">224</td><td class="codekolom">270</td><td class="bredecode"> /**</td></tr><tr><td class="codekolom">225</td><td class="codekolom">271</td><td class="bredecode"> * Used by `_.max` and `_.min` as the default `callback` when a given</td></tr><tr><td class="codekolom">226</td><td class="codekolom">272</td><td class="bredecode"> * `collection` is a string value.</td></tr><tr><td class="codekolom">227</td><td class="codekolom">273</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">228</td><td class="codekolom">274</td><td class="bredecode"> * @private</td></tr><tr><td class="codekolom">229</td><td class="codekolom">275</td><td class="bredecode"> * @param {String} value The character to inspect.</td></tr><tr><td class="codekolom">230</td><td class="codekolom">276</td><td class="bredecode"> * @returns {Number} Returns the code unit of given character.</td></tr><tr><td class="codekolom">231</td><td class="codekolom">277</td><td class="bredecode"> */</td></tr><tr><td class="codekolom">232</td><td class="codekolom">278</td><td class="bredecode"> function charAtCallback(value) {</td></tr><tr><td class="codekolom">233</td><td class="codekolom">279</td><td class="bredecode"> return value.charCodeAt(0);</td></tr><tr><td class="codekolom">234</td><td class="codekolom">280</td><td class="bredecode"> }</td></tr><tr><td class="codekolom">235</td><td class="codekolom">281</td><td class="bredecode"> </td></tr><tr><td class="codekolom">236</td><td class="codekolom">282</td><td class="bredecode"> /**</td></tr><tr><td class="codekolom">237</td><td class="codekolom">283</td><td class="bredecode"> * Used by `sortBy` to compare transformed `collection` values, stable sorting</td></tr><tr><td class="codekolom">238</td><td class="codekolom">284</td><td class="bredecode"> * them in ascending order.</td></tr><tr><td class="codekolom">239</td><td class="codekolom">285</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">240</td><td class="codekolom">286</td><td class="bredecode"> * @private</td></tr><tr><td class="codekolom">241</td><td class="codekolom">287</td><td class="bredecode"> * @param {Object} a The object to compare to `b`.</td></tr><tr><td class="codekolom">242</td><td class="codekolom">288</td><td class="bredecode"> * @param {Object} b The object to compare to `a`.</td></tr><tr><td class="codekolom">243</td><td class="codekolom">289</td><td class="bredecode"> * @returns {Number} Returns the sort order indicator of `1` or `-1`.</td></tr><tr><td class="codekolom">244</td><td class="codekolom">290</td><td class="bredecode"> */</td></tr><tr><td class="codekolom">245</td><td class="codekolom">291</td><td class="bredecode"> function compareAscending(a, b) {</td></tr><tr><td class="codekolom">246</td><td class="codekolom">292</td><td class="bredecode"> var ai = a.index,</td></tr><tr><td class="codekolom">247</td><td class="codekolom">293</td><td class="bredecode"> bi = b.index;</td></tr><tr><td class="codekolom">248</td><td class="codekolom">294</td><td class="bredecode"> </td></tr><tr><td class="codekolom">249</td><td class="codekolom">295</td><td class="bredecode"> a = a.criteria;</td></tr><tr><td class="codekolom">250</td><td class="codekolom">296</td><td class="bredecode"> b = b.criteria;</td></tr><tr><td class="codekolom">251</td><td class="codekolom">297</td><td class="bredecode"> </td></tr><tr><td class="codekolom">252</td><td class="codekolom">298</td><td class="bredecode"> // ensure a stable sort in V8 and other engines</td></tr><tr><td class="codekolom">253</td><td class="codekolom">299</td><td class="bredecode"> // http://code.google.com/p/v8/issues/detail?id=90</td></tr><tr><td class="codekolom">254</td><td class="codekolom">300</td><td class="bredecode"> if (a !== b) {</td></tr><tr><td class="codekolom">255</td><td class="codekolom">301</td><td class="bredecode"> if (a &gt; b || typeof a == 'undefined') {</td></tr><tr><td class="codekolom">256</td><td class="codekolom">302</td><td class="bredecode"> return 1;</td></tr><tr><td class="codekolom">257</td><td class="codekolom">303</td><td class="bredecode"> }</td></tr><tr><td class="codekolom">258</td><td class="codekolom">304</td><td class="bredecode"> if (a &lt; b || typeof b == 'undefined') {</td></tr><tr><td class="codekolom">259</td><td class="codekolom">305</td><td class="bredecode"> return -1;</td></tr><tr><td class="codekolom">260</td><td class="codekolom">306</td><td class="bredecode"> }</td></tr><tr><td class="codekolom">261</td><td class="codekolom">307</td><td class="bredecode"> }</td></tr><tr><td class="codekolom">262</td><td class="codekolom">308</td><td class="bredecode"> return ai &lt; bi ? -1 : 1;</td></tr><tr><td class="codekolom">263</td><td class="codekolom">309</td><td class="bredecode"> }</td></tr><tr><td class="codekolom">264</td><td class="codekolom">310</td><td class="bredecode"> </td></tr><tr><td class="codekolom">265</td><td class="codekolom">311</td><td class="bredecode"> /**</td></tr><tr><td class="codekolom">266</td><td class="codekolom">312</td><td class="bredecode"> * Creates a cache object to optimize linear searches of large arrays.</td></tr><tr><td class="codekolom">267</td><td class="codekolom">313</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">268</td><td class="codekolom">314</td><td class="bredecode"> * @private</td></tr><tr><td class="codekolom">269</td><td class="codekolom">315</td><td class="bredecode"> * @param {Array} [array=[]] The array to search.</td></tr><tr><td class="codekolom">270</td><td class="codekolom">316</td><td class="bredecode"> * @returns {Null|Object} Returns the cache object or `null` if caching should not be used.</td></tr><tr><td class="codekolom">271</td><td class="codekolom">317</td><td class="bredecode"> */</td></tr><tr><td class="codekolom">272</td><td class="codekolom">318</td><td class="bredecode"> function createCache(array) {</td></tr><tr><td class="codekolom">273</td><td class="codekolom">319</td><td class="bredecode"> var index = -1,</td></tr><tr><td class="codekolom">274</td><td class="codekolom">320</td><td class="bredecode"> length = array.length;</td></tr><tr><td class="codekolom">275</td><td class="codekolom">321</td><td class="bredecode"> </td></tr><tr><td class="codekolom">276</td><td class="codekolom">322</td><td class="bredecode"> var cache = getObject();</td></tr><tr><td class="codekolom">277</td><td class="codekolom">323</td><td class="bredecode"> cache['false'] = cache['null'] = cache['true'] = cache['undefined'] = false;</td></tr><tr><td class="codekolom">278</td><td class="codekolom">324</td><td class="bredecode"> </td></tr><tr><td class="codekolom">279</td><td class="codekolom">325</td><td class="bredecode"> var result = getObject();</td></tr><tr><td class="codekolom">280</td><td class="codekolom">326</td><td class="bredecode"> result.array = array;</td></tr><tr><td class="codekolom">281</td><td class="codekolom">327</td><td class="bredecode"> result.cache = cache;</td></tr><tr><td class="codekolom">282</td><td class="codekolom">328</td><td class="bredecode"> result.push = cachePush;</td></tr><tr><td class="codekolom">283</td><td class="codekolom">329</td><td class="bredecode"> </td></tr><tr><td class="codekolom">284</td><td class="codekolom">330</td><td class="bredecode"> while (++index &lt; length) {</td></tr><tr><td class="codekolom">285</td><td class="codekolom">331</td><td class="bredecode"> result.push(array[index]);</td></tr><tr><td class="codekolom">286</td><td class="codekolom">332</td><td class="bredecode"> }</td></tr><tr><td class="codekolom">287</td><td class="codekolom">333</td><td class="bredecode"> return cache.object === false</td></tr><tr><td class="codekolom">288</td><td class="codekolom">334</td><td class="bredecode"> ? (releaseObject(result), null)</td></tr><tr><td class="codekolom">289</td><td class="codekolom">335</td><td class="bredecode"> : result;</td></tr><tr><td class="codekolom">290</td><td class="codekolom">336</td><td class="bredecode"> }</td></tr><tr><td class="codekolom">291</td><td class="codekolom">337</td><td class="bredecode"> </td></tr><tr><td class="codekolom">292</td><td class="codekolom">338</td><td class="bredecode"> /**</td></tr><tr><td class="codekolom">293</td><td class="codekolom">339</td><td class="bredecode"> * Used by `template` to escape characters for inclusion in compiled</td></tr><tr><td class="codekolom">294</td><td class="codekolom">340</td><td class="bredecode"> * string literals.</td></tr><tr><td class="codekolom">295</td><td class="codekolom">341</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">296</td><td class="codekolom">342</td><td class="bredecode"> * @private</td></tr><tr><td class="codekolom">297</td><td class="codekolom">343</td><td class="bredecode"> * @param {String} match The matched character to escape.</td></tr><tr><td class="codekolom">298</td><td class="codekolom">344</td><td class="bredecode"> * @returns {String} Returns the escaped character.</td></tr><tr><td class="codekolom">299</td><td class="codekolom">345</td><td class="bredecode"> */</td></tr><tr><td class="codekolom">300</td><td class="codekolom">346</td><td class="bredecode"> function escapeStringChar(match) {</td></tr><tr><td class="codekolom">301</td><td class="codekolom">347</td><td class="bredecode"> return '\\' + stringEscapes[match];</td></tr><tr><td class="codekolom">302</td><td class="codekolom">348</td><td class="bredecode"> }</td></tr><tr><td class="codekolom">303</td><td class="codekolom">349</td><td class="bredecode"> </td></tr><tr><td class="codekolom">304</td><td class="codekolom">350</td><td class="bredecode"> /**</td></tr><tr><td class="codekolom">305</td><td class="codekolom">351</td><td class="bredecode"> * Gets an array from the array pool or creates a new one if the pool is empty.</td></tr><tr><td class="codekolom">306</td><td class="codekolom">352</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">307</td><td class="codekolom">353</td><td class="bredecode"> * @private</td></tr><tr><td class="codekolom">308</td><td class="codekolom">354</td><td class="bredecode"> * @returns {Array} The array from the pool.</td></tr><tr><td class="codekolom">309</td><td class="codekolom">355</td><td class="bredecode"> */</td></tr><tr><td class="codekolom">310</td><td class="codekolom">356</td><td class="bredecode"> function getArray() {</td></tr><tr><td class="codekolom">311</td><td class="codekolom">357</td><td class="bredecode"> return arrayPool.pop() || [];</td></tr><tr><td class="codekolom">312</td><td class="codekolom">358</td><td class="bredecode"> }</td></tr><tr><td class="codekolom">313</td><td class="codekolom">359</td><td class="bredecode"> </td></tr><tr><td class="codekolom">314</td><td class="codekolom">360</td><td class="bredecode"> /**</td></tr><tr><td class="codekolom">315</td><td class="codekolom">361</td><td class="bredecode"> * Gets an object from the object pool or creates a new one if the pool is empty.</td></tr><tr><td class="codekolom">316</td><td class="codekolom">362</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">317</td><td class="codekolom">363</td><td class="bredecode"> * @private</td></tr><tr><td class="codekolom">318</td><td class="codekolom">364</td><td class="bredecode"> * @returns {Object} The object from the pool.</td></tr><tr><td class="codekolom">319</td><td class="codekolom">365</td><td class="bredecode"> */</td></tr><tr><td class="codekolom">320</td><td class="codekolom">366</td><td class="bredecode"> function getObject() {</td></tr><tr><td class="codekolom">321</td><td class="codekolom">367</td><td class="bredecode"> return objectPool.pop() || {</td></tr><tr><td class="codekolom">322</td><td class="codekolom">368</td><td class="bredecode"> 'array': null,</td></tr><tr><td class="codekolom">323</td><td class="codekolom">369</td><td class="bredecode"> 'criteria': null,</td></tr><tr><td class="codekolom">324</td><td class="codekolom">370</td><td class="bredecode"> 'false': false,</td></tr><tr><td class="codekolom">325</td><td class="codekolom">371</td><td class="bredecode"> 'index': 0,</td></tr><tr><td class="codekolom">326</td><td class="codekolom">372</td><td class="bredecode"> 'leading': false,</td></tr><tr><td class="codekolom">327</td><td class="codekolom">373</td><td class="bredecode"> 'maxWait': 0,</td></tr><tr><td class="codekolom">328</td><td class="codekolom">374</td><td class="bredecode"> 'null': false,</td></tr><tr><td class="codekolom">329</td><td class="codekolom">375</td><td class="bredecode"> 'number': null,</td></tr><tr><td class="codekolom">330</td><td class="codekolom">376</td><td class="bredecode"> 'object': null,</td></tr><tr><td class="codekolom">331</td><td class="codekolom">377</td><td class="bredecode"> 'push': null,</td></tr><tr><td class="codekolom">332</td><td class="codekolom">378</td><td class="bredecode"> 'string': null,</td></tr><tr><td class="codekolom">333</td><td class="codekolom">379</td><td class="bredecode"> 'trailing': false,</td></tr><tr><td class="codekolom">334</td><td class="codekolom">380</td><td class="bredecode"> 'true': false,</td></tr><tr><td class="codekolom">335</td><td class="codekolom">381</td><td class="bredecode"> 'undefined': false,</td></tr><tr><td class="codekolom">336</td><td class="codekolom">382</td><td class="bredecode"> 'value': null</td></tr><tr><td class="codekolom">337</td><td class="codekolom">383</td><td class="bredecode"> };</td></tr><tr><td class="codekolom">338</td><td class="codekolom">384</td><td class="bredecode"> }</td></tr><tr><td class="codekolom">339</td><td class="codekolom">385</td><td class="bredecode"> </td></tr><tr><td class="codekolom">340</td><td class="codekolom">386</td><td class="bredecode"> /**</td></tr><tr><td class="codekolom">341</td><td class="codekolom">387</td><td class="bredecode"> * A no-operation function.</td></tr><tr><td class="codekolom">342</td><td class="codekolom">388</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">343</td><td class="codekolom">389</td><td class="bredecode"> * @private</td></tr><tr><td class="codekolom">344</td><td class="codekolom">390</td><td class="bredecode"> */</td></tr><tr><td class="codekolom">345</td><td class="codekolom">391</td><td class="bredecode"> function noop() {</td></tr><tr><td class="codekolom">346</td><td class="codekolom">392</td><td class="bredecode"> // no operation performed</td></tr><tr><td class="codekolom">347</td><td class="codekolom">393</td><td class="bredecode"> }</td></tr><tr><td class="codekolom">348</td><td class="codekolom">394</td><td class="bredecode"> </td></tr><tr><td class="codekolom">349</td><td class="codekolom">395</td><td class="bredecode"> /**</td></tr><tr><td class="codekolom">350</td><td class="codekolom">396</td><td class="bredecode"> * Releases the given `array` back to the array pool.</td></tr><tr><td class="codekolom">351</td><td class="codekolom">397</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">352</td><td class="codekolom">398</td><td class="bredecode"> * @private</td></tr><tr><td class="codekolom">353</td><td class="codekolom">399</td><td class="bredecode"> * @param {Array} [array] The array to release.</td></tr><tr><td class="codekolom">354</td><td class="codekolom">400</td><td class="bredecode"> */</td></tr><tr><td class="codekolom">355</td><td class="codekolom">401</td><td class="bredecode"> function releaseArray(array) {</td></tr><tr><td class="codekolom">356</td><td class="codekolom">402</td><td class="bredecode"> if (arrayPool.length == maxPoolSize) {</td></tr><tr><td class="codekolom">357</td><td class="codekolom">403</td><td class="bredecode"> arrayPool.length = maxPoolSize - 1;</td></tr><tr><td class="codekolom">358</td><td class="codekolom">404</td><td class="bredecode"> }</td></tr><tr><td class="codekolom">359</td><td class="codekolom">405</td><td class="bredecode"> array.length = 0;</td></tr><tr><td class="codekolom">360</td><td class="codekolom">406</td><td class="bredecode"> arrayPool.push(array);</td></tr><tr><td class="codekolom">361</td><td class="codekolom">407</td><td class="bredecode"> }</td></tr><tr><td class="codekolom">362</td><td class="codekolom">408</td><td class="bredecode"> </td></tr><tr><td class="codekolom">363</td><td class="codekolom">409</td><td class="bredecode"> /**</td></tr><tr><td class="codekolom">364</td><td class="codekolom">410</td><td class="bredecode"> * Releases the given `object` back to the object pool.</td></tr><tr><td class="codekolom">365</td><td class="codekolom">411</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">366</td><td class="codekolom">412</td><td class="bredecode"> * @private</td></tr><tr><td class="codekolom">367</td><td class="codekolom">413</td><td class="bredecode"> * @param {Object} [object] The object to release.</td></tr><tr><td class="codekolom">368</td><td class="codekolom">414</td><td class="bredecode"> */</td></tr><tr><td class="codekolom">369</td><td class="codekolom">415</td><td class="bredecode"> function releaseObject(object) {</td></tr><tr><td class="codekolom">370</td><td class="codekolom">416</td><td class="bredecode"> var cache = object.cache;</td></tr><tr><td class="codekolom">371</td><td class="codekolom">417</td><td class="bredecode"> if (cache) {</td></tr><tr><td class="codekolom">372</td><td class="codekolom">418</td><td class="bredecode"> releaseObject(cache);</td></tr><tr><td class="codekolom">373</td><td class="codekolom">419</td><td class="bredecode"> }</td></tr><tr><td class="codekolom">374</td><td class="codekolom">420</td><td class="bredecode"> if (objectPool.length == maxPoolSize) {</td></tr><tr><td class="codekolom">375</td><td class="codekolom">421</td><td class="bredecode"> objectPool.length = maxPoolSize - 1;</td></tr><tr><td class="codekolom">376</td><td class="codekolom">422</td><td class="bredecode"> }</td></tr><tr><td class="codekolom">377</td><td class="codekolom">423</td><td class="bredecode"> object.array = object.cache = object.criteria = object.object = object.number = object.string = object.value = null;</td></tr><tr><td class="codekolom">378</td><td class="codekolom">424</td><td class="bredecode"> objectPool.push(object);</td></tr><tr><td class="codekolom">379</td><td class="codekolom">425</td><td class="bredecode"> }</td></tr><tr><td class="codekolom">380</td><td class="codekolom">426</td><td class="bredecode"> </td></tr><tr><td class="codekolom">381</td><td class="codekolom">427</td><td class="bredecode"> /**</td></tr><tr><td class="codekolom">382</td><td class="codekolom">428</td><td class="bredecode"> * Slices the `collection` from the `start` index up to, but not including,</td></tr><tr><td class="codekolom">383</td><td class="codekolom">429</td><td class="bredecode"> * the `end` index.</td></tr><tr><td class="codekolom">384</td><td class="codekolom">430</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">385</td><td class="codekolom">431</td><td class="bredecode"> * Note: This function is used, instead of `Array#slice`, to support node lists</td></tr><tr><td class="codekolom">386</td><td class="codekolom">432</td><td class="bredecode"> * in IE &lt; 9 and to ensure dense arrays are returned.</td></tr><tr><td class="codekolom">387</td><td class="codekolom">433</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">388</td><td class="codekolom">434</td><td class="bredecode"> * @private</td></tr><tr><td class="codekolom">389</td><td class="codekolom">435</td><td class="bredecode"> * @param {Array|Object|String} collection The collection to slice.</td></tr><tr><td class="codekolom">390</td><td class="codekolom">436</td><td class="bredecode"> * @param {Number} start The start index.</td></tr><tr><td class="codekolom">391</td><td class="codekolom">437</td><td class="bredecode"> * @param {Number} end The end index.</td></tr><tr><td class="codekolom">392</td><td class="codekolom">438</td><td class="bredecode"> * @returns {Array} Returns the new array.</td></tr><tr><td class="codekolom">393</td><td class="codekolom">439</td><td class="bredecode"> */</td></tr><tr><td class="codekolom">394</td><td class="codekolom">440</td><td class="bredecode"> function slice(array, start, end) {</td></tr><tr><td class="codekolom">395</td><td class="codekolom">441</td><td class="bredecode"> start || (start = 0);</td></tr><tr><td class="codekolom">396</td><td class="codekolom">442</td><td class="bredecode"> if (typeof end == 'undefined') {</td></tr><tr><td class="codekolom">397</td><td class="codekolom">443</td><td class="bredecode"> end = array ? array.length : 0;</td></tr><tr><td class="codekolom">398</td><td class="codekolom">444</td><td class="bredecode"> }</td></tr><tr><td class="codekolom">399</td><td class="codekolom">445</td><td class="bredecode"> var index = -1,</td></tr><tr><td class="codekolom">400</td><td class="codekolom">446</td><td class="bredecode"> length = end - start || 0,</td></tr><tr><td class="codekolom">401</td><td class="codekolom">447</td><td class="bredecode"> result = Array(length &lt; 0 ? 0 : length);</td></tr><tr><td class="codekolom">402</td><td class="codekolom">448</td><td class="bredecode"> </td></tr><tr><td class="codekolom">403</td><td class="codekolom">449</td><td class="bredecode"> while (++index &lt; length) {</td></tr><tr><td class="codekolom">404</td><td class="codekolom">450</td><td class="bredecode"> result[index] = array[start + index];</td></tr><tr><td class="codekolom">405</td><td class="codekolom">451</td><td class="bredecode"> }</td></tr><tr><td class="codekolom">406</td><td class="codekolom">452</td><td class="bredecode"> return result;</td></tr><tr><td class="codekolom">407</td><td class="codekolom">453</td><td class="bredecode"> }</td></tr><tr><td class="codekolom">408</td><td class="codekolom">454</td><td class="bredecode"> </td></tr><tr><td class="codekolom">409</td><td class="codekolom">455</td><td class="bredecode"> /*--------------------------------------------------------------------------*/</td></tr><tr><td class="codekolom">410</td><td class="codekolom">456</td><td class="bredecode"> </td></tr><tr><td class="codekolom">411</td><td class="codekolom">457</td><td class="bredecode"> /**</td></tr><tr><td class="codekolom">412</td><td class="codekolom">458</td><td class="bredecode"> * Create a new `lodash` function using the given `context` object.</td></tr><tr><td class="codekolom">413</td><td class="codekolom">459</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">414</td><td class="codekolom">460</td><td class="bredecode"> * @static</td></tr><tr><td class="codekolom">415</td><td class="codekolom">461</td><td class="bredecode"> * @memberOf _</td></tr><tr><td class="codekolom">416</td><td class="codekolom">462</td><td class="bredecode"> * @category Utilities</td></tr><tr><td class="codekolom">417</td><td class="codekolom">463</td><td class="bredecode"> * @param {Object} [context=window] The context object.</td></tr><tr><td class="codekolom">418</td><td class="codekolom">464</td><td class="bredecode"> * @returns {Function} Returns the `lodash` function.</td></tr><tr><td class="codekolom">419</td><td class="codekolom">465</td><td class="bredecode"> */</td></tr><tr><td class="codekolom">420</td><td class="codekolom">466</td><td class="bredecode"> function runInContext(context) {</td></tr><tr><td class="codekolom">421</td><td class="codekolom">467</td><td class="bredecode"> // Avoid issues with some ES3 environments that attempt to use values, named</td></tr><tr><td class="codekolom">422</td><td class="codekolom">468</td><td class="bredecode"> // after built-in constructors like `Object`, for the creation of literals.</td></tr><tr><td class="codekolom">423</td><td class="codekolom">469</td><td class="bredecode"> // ES5 clears this up by stating that literals must use built-in constructors.</td></tr><tr><td class="codekolom">424</td><td class="codekolom">470</td><td class="bredecode"> // See http://es5.github.com/#x11.1.5.</td></tr><tr><td class="codekolom">425</td><td class="codekolom">471</td><td class="bredecode"> context = context ? _.defaults(window.Object(), context, _.pick(window, contextProps)) : window;</td></tr><tr><td class="codekolom">426</td><td class="codekolom">472</td><td class="bredecode"> </td></tr><tr><td class="codekolom">427</td><td class="codekolom">473</td><td class="bredecode"> /** Native constructor references */</td></tr><tr><td class="codekolom">428</td><td class="codekolom">474</td><td class="bredecode"> var Array = context.Array,</td></tr><tr><td class="codekolom">429</td><td class="codekolom">475</td><td class="bredecode"> Boolean = context.Boolean,</td></tr><tr><td class="codekolom">430</td><td class="codekolom">476</td><td class="bredecode"> Date = context.Date,</td></tr><tr><td class="codekolom">431</td><td class="codekolom">477</td><td class="bredecode"> Function = context.Function,</td></tr><tr><td class="codekolom">432</td><td class="codekolom">478</td><td class="bredecode"> Math = context.Math,</td></tr><tr><td class="codekolom">433</td><td class="codekolom">479</td><td class="bredecode"> Number = context.Number,</td></tr><tr><td class="codekolom">434</td><td class="codekolom">480</td><td class="bredecode"> Object = context.Object,</td></tr><tr><td class="codekolom">435</td><td class="codekolom">481</td><td class="bredecode"> RegExp = context.RegExp,</td></tr><tr><td class="codekolom">436</td><td class="codekolom">482</td><td class="bredecode"> String = context.String,</td></tr><tr><td class="codekolom">437</td><td class="codekolom">483</td><td class="bredecode"> TypeError = context.TypeError;</td></tr><tr><td class="codekolom">438</td><td class="codekolom">484</td><td class="bredecode"> </td></tr><tr><td class="codekolom">439</td><td class="codekolom">485</td><td class="bredecode"> /**</td></tr><tr><td class="codekolom">440</td><td class="codekolom">486</td><td class="bredecode"> * Used for `Array` method references.</td></tr><tr><td class="codekolom">441</td><td class="codekolom">487</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">442</td><td class="codekolom">488</td><td class="bredecode"> * Normally `Array.prototype` would suffice, however, using an array literal</td></tr><tr><td class="codekolom">443</td><td class="codekolom">489</td><td class="bredecode"> * avoids issues in Narwhal.</td></tr><tr><td class="codekolom">444</td><td class="codekolom">490</td><td class="bredecode"> */</td></tr><tr><td class="codekolom">445</td><td class="codekolom">491</td><td class="bredecode"> var arrayRef = [];</td></tr><tr><td class="codekolom">446</td><td class="codekolom">492</td><td class="bredecode"> </td></tr><tr><td class="codekolom">447</td><td class="codekolom">493</td><td class="bredecode"> /** Used for native method references */</td></tr><tr><td class="codekolom">448</td><td class="codekolom">494</td><td class="bredecode"> var objectProto = Object.prototype,</td></tr><tr><td class="codekolom">449</td><td class="codekolom">495</td><td class="bredecode"> stringProto = String.prototype;</td></tr><tr><td class="codekolom">450</td><td class="codekolom">496</td><td class="bredecode"> </td></tr><tr><td class="codekolom">451</td><td class="codekolom">497</td><td class="bredecode"> /** Used to restore the original `_` reference in `noConflict` */</td></tr><tr><td class="codekolom">452</td><td class="codekolom">498</td><td class="bredecode"> var oldDash = context._;</td></tr><tr><td class="codekolom">453</td><td class="codekolom">499</td><td class="bredecode"> </td></tr><tr><td class="codekolom">454</td><td class="codekolom">500</td><td class="bredecode"> /** Used to detect if a method is native */</td></tr><tr><td class="codekolom">455</td><td class="codekolom">501</td><td class="bredecode"> var reNative = RegExp('^' +</td></tr><tr><td class="codekolom">456</td><td class="codekolom">502</td><td class="bredecode"> String(objectProto.valueOf)</td></tr><tr><td class="codekolom">457</td><td class="codekolom">503</td><td class="bredecode"> .replace(/[.*+?^${}()|[\]\\]/g, '\\$&amp;')</td></tr><tr><td class="codekolom">458</td><td class="codekolom">504</td><td class="bredecode"> .replace(/valueOf|for [^\]]+/g, '.+?') + '$'</td></tr><tr><td class="codekolom">459</td><td class="codekolom">505</td><td class="bredecode"> );</td></tr><tr><td class="codekolom">460</td><td class="codekolom">506</td><td class="bredecode"> </td></tr><tr><td class="codekolom">461</td><td class="codekolom">507</td><td class="bredecode"> /** Native method shortcuts */</td></tr><tr><td class="codekolom">462</td><td class="codekolom">508</td><td class="bredecode"> var ceil = Math.ceil,</td></tr><tr><td class="codekolom">463</td><td class="codekolom">509</td><td class="bredecode"> clearTimeout = context.clearTimeout,</td></tr><tr><td class="codekolom">464</td><td class="codekolom">510</td><td class="bredecode"> concat = arrayRef.concat,</td></tr><tr><td class="codekolom">465</td><td class="codekolom">511</td><td class="bredecode"> floor = Math.floor,</td></tr><tr><td class="codekolom">466</td><td class="codekolom">512</td><td class="bredecode"> fnToString = Function.prototype.toString,</td></tr><tr><td class="codekolom">467</td><td class="codekolom">513</td><td class="bredecode"> getPrototypeOf = reNative.test(getPrototypeOf = Object.getPrototypeOf) &amp;&amp; getPrototypeOf,</td></tr><tr><td class="codekolom">468</td><td class="codekolom">514</td><td class="bredecode"> hasOwnProperty = objectProto.hasOwnProperty,</td></tr><tr><td class="codekolom">469</td><td class="codekolom">515</td><td class="bredecode"> push = arrayRef.push,</td></tr><tr><td class="codekolom">470</td><td class="codekolom">516</td><td class="bredecode"> propertyIsEnumerable = objectProto.propertyIsEnumerable,</td></tr><tr><td class="codekolom">471</td><td class="codekolom">517</td><td class="bredecode"> setImmediate = context.setImmediate,</td></tr><tr><td class="codekolom">472</td><td class="codekolom">518</td><td class="bredecode"> setTimeout = context.setTimeout,</td></tr><tr><td class="codekolom">473</td><td class="codekolom">519</td><td class="bredecode"> toString = objectProto.toString;</td></tr><tr><td class="codekolom">474</td><td class="codekolom">520</td><td class="bredecode"> </td></tr><tr><td class="codekolom">475</td><td class="codekolom">521</td><td class="bredecode"> /* Native method shortcuts for methods with the same name as other `lodash` methods */</td></tr><tr><td class="codekolom">476</td><td class="codekolom">522</td><td class="bredecode"> var nativeBind = reNative.test(nativeBind = toString.bind) &amp;&amp; nativeBind,</td></tr><tr><td class="codekolom">477</td><td class="codekolom">523</td><td class="bredecode"> nativeCreate = reNative.test(nativeCreate = Object.create) &amp;&amp; nativeCreate,</td></tr><tr><td class="codekolom">478</td><td class="codekolom">524</td><td class="bredecode"> nativeIsArray = reNative.test(nativeIsArray = Array.isArray) &amp;&amp; nativeIsArray,</td></tr><tr><td class="codekolom">479</td><td class="codekolom">525</td><td class="bredecode"> nativeIsFinite = context.isFinite,</td></tr><tr><td class="codekolom">480</td><td class="codekolom">526</td><td class="bredecode"> nativeIsNaN = context.isNaN,</td></tr><tr><td class="codekolom">481</td><td class="codekolom">527</td><td class="bredecode"> nativeKeys = reNative.test(nativeKeys = Object.keys) &amp;&amp; nativeKeys,</td></tr><tr><td class="codekolom">482</td><td class="codekolom">528</td><td class="bredecode"> nativeMax = Math.max,</td></tr><tr><td class="codekolom">483</td><td class="codekolom">529</td><td class="bredecode"> nativeMin = Math.min,</td></tr><tr><td class="codekolom">484</td><td class="codekolom">530</td><td class="bredecode"> nativeParseInt = context.parseInt,</td></tr><tr><td class="codekolom">485</td><td class="codekolom">531</td><td class="bredecode"> nativeRandom = Math.random,</td></tr><tr><td class="codekolom">486</td><td class="codekolom">532</td><td class="bredecode"> nativeSlice = arrayRef.slice;</td></tr><tr><td class="codekolom">487</td><td class="codekolom">533</td><td class="bredecode"> </td></tr><tr><td class="codekolom">488</td><td class="codekolom">534</td><td class="bredecode"> /** Detect various environments */</td></tr><tr><td class="codekolom">489</td><td class="codekolom">535</td><td class="bredecode"> var isIeOpera = reNative.test(context.attachEvent),</td></tr><tr><td class="codekolom">490</td><td class="codekolom">536</td><td class="bredecode"> isV8 = nativeBind &amp;&amp; !/\n|true/.test(nativeBind + isIeOpera);</td></tr><tr><td class="codekolom">491</td><td class="codekolom">537</td><td class="bredecode"> </td></tr><tr><td class="codekolom">492</td><td class="codekolom">538</td><td class="bredecode"> /** Used to lookup a built-in constructor by [[Class]] */</td></tr><tr><td class="codekolom">493</td><td class="codekolom">539</td><td class="bredecode"> var ctorByClass = {};</td></tr><tr><td class="codekolom">494</td><td class="codekolom">540</td><td class="bredecode"> ctorByClass[arrayClass] = Array;</td></tr><tr><td class="codekolom">495</td><td class="codekolom">541</td><td class="bredecode"> ctorByClass[boolClass] = Boolean;</td></tr><tr><td class="codekolom">496</td><td class="codekolom">542</td><td class="bredecode"> ctorByClass[dateClass] = Date;</td></tr><tr><td class="codekolom">497</td><td class="codekolom">543</td><td class="bredecode"> ctorByClass[funcClass] = Function;</td></tr><tr><td class="codekolom">498</td><td class="codekolom">544</td><td class="bredecode"> ctorByClass[objectClass] = Object;</td></tr><tr><td class="codekolom">499</td><td class="codekolom">545</td><td class="bredecode"> ctorByClass[numberClass] = Number;</td></tr><tr><td class="codekolom">500</td><td class="codekolom">546</td><td class="bredecode"> ctorByClass[regexpClass] = RegExp;</td></tr><tr><td class="codekolom">501</td><td class="codekolom">547</td><td class="bredecode"> ctorByClass[stringClass] = String;</td></tr><tr><td class="codekolom">502</td><td class="codekolom">548</td><td class="bredecode"> </td></tr><tr><td class="codekolom">503</td><td class="codekolom">549</td><td class="bredecode"> /*--------------------------------------------------------------------------*/</td></tr><tr><td class="codekolom">504</td><td class="codekolom">550</td><td class="bredecode"> </td></tr><tr><td class="codekolom">505</td><td class="codekolom">551</td><td class="bredecode"> /**</td></tr><tr><td class="codekolom">506</td><td class="codekolom">552</td><td class="bredecode"> * Creates a `lodash` object, which wraps the given `value`, to enable method</td></tr><tr><td class="codekolom">507</td><td class="codekolom">553</td><td class="bredecode"> * chaining.</td></tr><tr><td class="codekolom">508</td><td class="codekolom">554</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">509</td><td class="codekolom">555</td><td class="bredecode"> * In addition to Lo-Dash methods, wrappers also have the following `Array` methods:</td></tr><tr><td class="codekolom">510</td><td class="codekolom">556</td><td class="bredecode"> * `concat`, `join`, `pop`, `push`, `reverse`, `shift`, `slice`, `sort`, `splice`,</td></tr><tr><td class="codekolom">511</td><td class="codekolom">557</td><td class="bredecode"> * and `unshift`</td></tr><tr><td class="codekolom">512</td><td class="codekolom">558</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">513</td><td class="codekolom">559</td><td class="bredecode"> * Chaining is supported in custom builds as long as the `value` method is</td></tr><tr><td class="codekolom">514</td><td class="codekolom">560</td><td class="bredecode"> * implicitly or explicitly included in the build.</td></tr><tr><td class="codekolom">515</td><td class="codekolom">561</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">516</td><td class="codekolom">562</td><td class="bredecode"> * The chainable wrapper functions are:</td></tr><tr><td class="codekolom">517</td><td class="codekolom">563</td><td class="bredecode"> * `after`, `assign`, `bind`, `bindAll`, `bindKey`, `chain`, `compact`,</td></tr><tr><td class="codekolom">518</td><td class="codekolom">564</td><td class="bredecode"> * `compose`, `concat`, `countBy`, `createCallback`, `debounce`, `defaults`,</td></tr><tr><td class="codekolom">519</td><td class="codekolom">565</td><td class="bredecode"> * `defer`, `delay`, `difference`, `filter`, `flatten`, `forEach`, `forIn`,</td></tr><tr><td class="codekolom">520</td><td class="codekolom">566</td><td class="bredecode"> * `forOwn`, `functions`, `groupBy`, `initial`, `intersection`, `invert`,</td></tr><tr><td class="codekolom">521</td><td class="codekolom">567</td><td class="bredecode"> * `invoke`, `keys`, `map`, `max`, `memoize`, `merge`, `min`, `object`, `omit`,</td></tr><tr><td class="codekolom">522</td><td class="codekolom">568</td><td class="bredecode"> * `once`, `pairs`, `partial`, `partialRight`, `pick`, `pluck`, `push`, `range`,</td></tr><tr><td class="codekolom">523</td><td class="codekolom">569</td><td class="bredecode"> * `reject`, `rest`, `reverse`, `shuffle`, `slice`, `sort`, `sortBy`, `splice`,</td></tr><tr><td class="codekolom">524</td><td class="codekolom">570</td><td class="bredecode"> * `tap`, `throttle`, `times`, `toArray`, `transform`, `union`, `uniq`, `unshift`,</td></tr><tr><td class="codekolom">525</td><td class="codekolom">571</td><td class="bredecode"> * `unzip`, `values`, `where`, `without`, `wrap`, and `zip`</td></tr><tr><td class="codekolom">526</td><td class="codekolom">572</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">527</td><td class="codekolom">573</td><td class="bredecode"> * The non-chainable wrapper functions are:</td></tr><tr><td class="codekolom">528</td><td class="codekolom">574</td><td class="bredecode"> * `clone`, `cloneDeep`, `contains`, `escape`, `every`, `find`, `has`,</td></tr><tr><td class="codekolom">529</td><td class="codekolom">575</td><td class="bredecode"> * `identity`, `indexOf`, `isArguments`, `isArray`, `isBoolean`, `isDate`,</td></tr><tr><td class="codekolom">530</td><td class="codekolom">576</td><td class="bredecode"> * `isElement`, `isEmpty`, `isEqual`, `isFinite`, `isFunction`, `isNaN`,</td></tr><tr><td class="codekolom">531</td><td class="codekolom">577</td><td class="bredecode"> * `isNull`, `isNumber`, `isObject`, `isPlainObject`, `isRegExp`, `isString`,</td></tr><tr><td class="codekolom">532</td><td class="codekolom">578</td><td class="bredecode"> * `isUndefined`, `join`, `lastIndexOf`, `mixin`, `noConflict`, `parseInt`,</td></tr><tr><td class="codekolom">533</td><td class="codekolom">579</td><td class="bredecode"> * `pop`, `random`, `reduce`, `reduceRight`, `result`, `shift`, `size`, `some`,</td></tr><tr><td class="codekolom">534</td><td class="codekolom">580</td><td class="bredecode"> * `sortedIndex`, `runInContext`, `template`, `unescape`, `uniqueId`, and `value`</td></tr><tr><td class="codekolom">535</td><td class="codekolom">581</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">536</td><td class="codekolom">582</td><td class="bredecode"> * The wrapper functions `first` and `last` return wrapped values when `n` is</td></tr><tr><td class="codekolom">537</td><td class="codekolom">583</td><td class="bredecode"> * passed, otherwise they return unwrapped values.</td></tr><tr><td class="codekolom">538</td><td class="codekolom">584</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">539</td><td class="codekolom">585</td><td class="bredecode"> * @name _</td></tr><tr><td class="codekolom">540</td><td class="codekolom">586</td><td class="bredecode"> * @constructor</td></tr><tr><td class="codekolom">541</td><td class="codekolom">587</td><td class="bredecode"> * @alias chain</td></tr><tr><td class="codekolom">542</td><td class="codekolom">588</td><td class="bredecode"> * @category Chaining</td></tr><tr><td class="codekolom">543</td><td class="codekolom">589</td><td class="bredecode"> * @param {Mixed} value The value to wrap in a `lodash` instance.</td></tr><tr><td class="codekolom">544</td><td class="codekolom">590</td><td class="bredecode"> * @returns {Object} Returns a `lodash` instance.</td></tr><tr><td class="codekolom">545</td><td class="codekolom">591</td><td class="bredecode"> * @example</td></tr><tr><td class="codekolom">546</td><td class="codekolom">592</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">547</td><td class="codekolom">593</td><td class="bredecode"> * var wrapped = _([1, 2, 3]);</td></tr><tr><td class="codekolom">548</td><td class="codekolom">594</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">549</td><td class="codekolom">595</td><td class="bredecode"> * // returns an unwrapped value</td></tr><tr><td class="codekolom">550</td><td class="codekolom">596</td><td class="bredecode"> * wrapped.reduce(function(sum, num) {</td></tr><tr><td class="codekolom">551</td><td class="codekolom">597</td><td class="bredecode"> * return sum + num;</td></tr><tr><td class="codekolom">552</td><td class="codekolom">598</td><td class="bredecode"> * });</td></tr><tr><td class="codekolom">553</td><td class="codekolom">599</td><td class="bredecode"> * // =&gt; 6</td></tr><tr><td class="codekolom">554</td><td class="codekolom">600</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">555</td><td class="codekolom">601</td><td class="bredecode"> * // returns a wrapped value</td></tr><tr><td class="codekolom">556</td><td class="codekolom">602</td><td class="bredecode"> * var squares = wrapped.map(function(num) {</td></tr><tr><td class="codekolom">557</td><td class="codekolom">603</td><td class="bredecode"> * return num * num;</td></tr><tr><td class="codekolom">558</td><td class="codekolom">604</td><td class="bredecode"> * });</td></tr><tr><td class="codekolom">559</td><td class="codekolom">605</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">560</td><td class="codekolom">606</td><td class="bredecode"> * _.isArray(squares);</td></tr><tr><td class="codekolom">561</td><td class="codekolom">607</td><td class="bredecode"> * // =&gt; false</td></tr><tr><td class="codekolom">562</td><td class="codekolom">608</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">563</td><td class="codekolom">609</td><td class="bredecode"> * _.isArray(squares.value());</td></tr><tr><td class="codekolom">564</td><td class="codekolom">610</td><td class="bredecode"> * // =&gt; true</td></tr><tr><td class="codekolom">565</td><td class="codekolom">611</td><td class="bredecode"> */</td></tr><tr><td class="codekolom">566</td><td class="codekolom">612</td><td class="bredecode"> function lodash(value) {</td></tr><tr><td class="codekolom">567</td><td class="codekolom">613</td><td class="bredecode"> // don't wrap if already wrapped, even if wrapped by a different `lodash` constructor</td></tr><tr><td class="codekolom">568</td><td class="codekolom">614</td><td class="bredecode"> return (value &amp;&amp; typeof value == 'object' &amp;&amp; !isArray(value) &amp;&amp; hasOwnProperty.call(value, '__wrapped__'))</td></tr><tr><td class="codekolom">569</td><td class="codekolom">615</td><td class="bredecode"> ? value</td></tr><tr><td class="codekolom">570</td><td class="codekolom">616</td><td class="bredecode"> : new lodashWrapper(value);</td></tr><tr><td class="codekolom">571</td><td class="codekolom">617</td><td class="bredecode"> }</td></tr><tr><td class="codekolom">572</td><td class="codekolom">618</td><td class="bredecode"> </td></tr><tr><td class="codekolom">573</td><td class="codekolom">619</td><td class="bredecode"> /**</td></tr><tr><td class="codekolom">574</td><td class="codekolom">620</td><td class="bredecode"> * A fast path for creating `lodash` wrapper objects.</td></tr><tr><td class="codekolom">575</td><td class="codekolom">621</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">576</td><td class="codekolom">622</td><td class="bredecode"> * @private</td></tr><tr><td class="codekolom">577</td><td class="codekolom">623</td><td class="bredecode"> * @param {Mixed} value The value to wrap in a `lodash` instance.</td></tr><tr><td class="codekolom">578</td><td class="codekolom">624</td><td class="bredecode"> * @returns {Object} Returns a `lodash` instance.</td></tr><tr><td class="codekolom">579</td><td class="codekolom">625</td><td class="bredecode"> */</td></tr><tr><td class="codekolom">580</td><td class="codekolom">626</td><td class="bredecode"> function lodashWrapper(value) {</td></tr><tr><td class="codekolom">581</td><td class="codekolom">627</td><td class="bredecode"> this.__wrapped__ = value;</td></tr><tr><td class="codekolom">582</td><td class="codekolom">628</td><td class="bredecode"> }</td></tr><tr><td class="codekolom">583</td><td class="codekolom">629</td><td class="bredecode"> // ensure `new lodashWrapper` is an instance of `lodash`</td></tr><tr><td class="codekolom">584</td><td class="codekolom">630</td><td class="bredecode"> lodashWrapper.prototype = lodash.prototype;</td></tr><tr><td class="codekolom">585</td><td class="codekolom">631</td><td class="bredecode"> </td></tr><tr><td class="codekolom">586</td><td class="codekolom">632</td><td class="bredecode"> /**</td></tr><tr><td class="codekolom">587</td><td class="codekolom">633</td><td class="bredecode"> * An object used to flag environments features.</td></tr><tr><td class="codekolom">588</td><td class="codekolom">634</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">589</td><td class="codekolom">635</td><td class="bredecode"> * @static</td></tr><tr><td class="codekolom">590</td><td class="codekolom">636</td><td class="bredecode"> * @memberOf _</td></tr><tr><td class="codekolom">591</td><td class="codekolom">637</td><td class="bredecode"> * @type Object</td></tr><tr><td class="codekolom">592</td><td class="codekolom">638</td><td class="bredecode"> */</td></tr><tr><td class="codekolom">593</td><td class="codekolom">639</td><td class="bredecode"> var support = lodash.support = {};</td></tr><tr><td class="codekolom">594</td><td class="codekolom">640</td><td class="bredecode"> </td></tr><tr><td class="codekolom">595</td><td class="codekolom">641</td><td class="bredecode"> /**</td></tr><tr><td class="codekolom">596</td><td class="codekolom">642</td><td class="bredecode"> * Detect if `Function#bind` exists and is inferred to be fast (all but V8).</td></tr><tr><td class="codekolom">597</td><td class="codekolom">643</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">598</td><td class="codekolom">644</td><td class="bredecode"> * @memberOf _.support</td></tr><tr><td class="codekolom">599</td><td class="codekolom">645</td><td class="bredecode"> * @type Boolean</td></tr><tr><td class="codekolom">600</td><td class="codekolom">646</td><td class="bredecode"> */</td></tr><tr><td class="codekolom">601</td><td class="codekolom">647</td><td class="bredecode"> support.fastBind = nativeBind &amp;&amp; !isV8;</td></tr><tr><td class="codekolom">602</td><td class="codekolom">648</td><td class="bredecode"> </td></tr><tr><td class="codekolom">603</td><td class="codekolom">649</td><td class="bredecode"> /**</td></tr><tr><td class="codekolom">604</td><td class="codekolom">650</td><td class="bredecode"> * By default, the template delimiters used by Lo-Dash are similar to those in</td></tr><tr><td class="codekolom">605</td><td class="codekolom">651</td><td class="bredecode"> * embedded Ruby (ERB). Change the following template settings to use alternative</td></tr><tr><td class="codekolom">606</td><td class="codekolom">652</td><td class="bredecode"> * delimiters.</td></tr><tr><td class="codekolom">607</td><td class="codekolom">653</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">608</td><td class="codekolom">654</td><td class="bredecode"> * @static</td></tr><tr><td class="codekolom">609</td><td class="codekolom">655</td><td class="bredecode"> * @memberOf _</td></tr><tr><td class="codekolom">610</td><td class="codekolom">656</td><td class="bredecode"> * @type Object</td></tr><tr><td class="codekolom">611</td><td class="codekolom">657</td><td class="bredecode"> */</td></tr><tr><td class="codekolom">612</td><td class="codekolom">658</td><td class="bredecode"> lodash.templateSettings = {</td></tr><tr><td class="codekolom">613</td><td class="codekolom">659</td><td class="bredecode"> </td></tr><tr><td class="codekolom">614</td><td class="codekolom">660</td><td class="bredecode"> /**</td></tr><tr><td class="codekolom">615</td><td class="codekolom">661</td><td class="bredecode"> * Used to detect `data` property values to be HTML-escaped.</td></tr><tr><td class="codekolom">616</td><td class="codekolom">662</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">617</td><td class="codekolom">663</td><td class="bredecode"> * @memberOf _.templateSettings</td></tr><tr><td class="codekolom">618</td><td class="codekolom">664</td><td class="bredecode"> * @type RegExp</td></tr><tr><td class="codekolom">619</td><td class="codekolom">665</td><td class="bredecode"> */</td></tr><tr><td class="codekolom">620</td><td class="codekolom">666</td><td class="bredecode"> 'escape': /&lt;%-([\s\S]+?)%&gt;/g,</td></tr><tr><td class="codekolom">621</td><td class="codekolom">667</td><td class="bredecode"> </td></tr><tr><td class="codekolom">622</td><td class="codekolom">668</td><td class="bredecode"> /**</td></tr><tr><td class="codekolom">623</td><td class="codekolom">669</td><td class="bredecode"> * Used to detect code to be evaluated.</td></tr><tr><td class="codekolom">624</td><td class="codekolom">670</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">625</td><td class="codekolom">671</td><td class="bredecode"> * @memberOf _.templateSettings</td></tr><tr><td class="codekolom">626</td><td class="codekolom">672</td><td class="bredecode"> * @type RegExp</td></tr><tr><td class="codekolom">627</td><td class="codekolom">673</td><td class="bredecode"> */</td></tr><tr><td class="codekolom">628</td><td class="codekolom">674</td><td class="bredecode"> 'evaluate': /&lt;%([\s\S]+?)%&gt;/g,</td></tr><tr><td class="codekolom">629</td><td class="codekolom">675</td><td class="bredecode"> </td></tr><tr><td class="codekolom">630</td><td class="codekolom">676</td><td class="bredecode"> /**</td></tr><tr><td class="codekolom">631</td><td class="codekolom">677</td><td class="bredecode"> * Used to detect `data` property values to inject.</td></tr><tr><td class="codekolom">632</td><td class="codekolom">678</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">633</td><td class="codekolom">679</td><td class="bredecode"> * @memberOf _.templateSettings</td></tr><tr><td class="codekolom">634</td><td class="codekolom">680</td><td class="bredecode"> * @type RegExp</td></tr><tr><td class="codekolom">635</td><td class="codekolom">681</td><td class="bredecode"> */</td></tr><tr><td class="codekolom">636</td><td class="codekolom">682</td><td class="bredecode"> 'interpolate': reInterpolate,</td></tr><tr><td class="codekolom">637</td><td class="codekolom">683</td><td class="bredecode"> </td></tr><tr><td class="codekolom">638</td><td class="codekolom">684</td><td class="bredecode"> /**</td></tr><tr><td class="codekolom">639</td><td class="codekolom">685</td><td class="bredecode"> * Used to reference the data object in the template text.</td></tr><tr><td class="codekolom">640</td><td class="codekolom">686</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">641</td><td class="codekolom">687</td><td class="bredecode"> * @memberOf _.templateSettings</td></tr><tr><td class="codekolom">642</td><td class="codekolom">688</td><td class="bredecode"> * @type String</td></tr><tr><td class="codekolom">643</td><td class="codekolom">689</td><td class="bredecode"> */</td></tr><tr><td class="codekolom">644</td><td class="codekolom">690</td><td class="bredecode"> 'variable': '',</td></tr><tr><td class="codekolom">645</td><td class="codekolom">691</td><td class="bredecode"> </td></tr><tr><td class="codekolom">646</td><td class="codekolom">692</td><td class="bredecode"> /**</td></tr><tr><td class="codekolom">647</td><td class="codekolom">693</td><td class="bredecode"> * Used to import variables into the compiled template.</td></tr><tr><td class="codekolom">648</td><td class="codekolom">694</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">649</td><td class="codekolom">695</td><td class="bredecode"> * @memberOf _.templateSettings</td></tr><tr><td class="codekolom">650</td><td class="codekolom">696</td><td class="bredecode"> * @type Object</td></tr><tr><td class="codekolom">651</td><td class="codekolom">697</td><td class="bredecode"> */</td></tr><tr><td class="codekolom">652</td><td class="codekolom">698</td><td class="bredecode"> 'imports': {</td></tr><tr><td class="codekolom">653</td><td class="codekolom">699</td><td class="bredecode"> </td></tr><tr><td class="codekolom">654</td><td class="codekolom">700</td><td class="bredecode"> /**</td></tr><tr><td class="codekolom">655</td><td class="codekolom">701</td><td class="bredecode"> * A reference to the `lodash` function.</td></tr><tr><td class="codekolom">656</td><td class="codekolom">702</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">657</td><td class="codekolom">703</td><td class="bredecode"> * @memberOf _.templateSettings.imports</td></tr><tr><td class="codekolom">658</td><td class="codekolom">704</td><td class="bredecode"> * @type Function</td></tr><tr><td class="codekolom">659</td><td class="codekolom">705</td><td class="bredecode"> */</td></tr><tr><td class="codekolom">660</td><td class="codekolom">706</td><td class="bredecode"> '_': lodash</td></tr><tr><td class="codekolom">661</td><td class="codekolom">707</td><td class="bredecode"> }</td></tr><tr><td class="codekolom">662</td><td class="codekolom">708</td><td class="bredecode"> };</td></tr><tr><td class="codekolom">663</td><td class="codekolom">709</td><td class="bredecode"> </td></tr><tr><td class="codekolom">664</td><td class="codekolom">710</td><td class="bredecode"> /*--------------------------------------------------------------------------*/</td></tr><tr><td class="codekolom">665</td><td class="codekolom">711</td><td class="bredecode"> </td></tr><tr><td class="codekolom">666</td><td class="codekolom">712</td><td class="bredecode"> /**</td></tr><tr><td class="codekolom">667</td><td class="codekolom">713</td><td class="bredecode"> * Creates a function that, when called, invokes `func` with the `this` binding</td></tr><tr><td class="codekolom">668</td><td class="codekolom">714</td><td class="bredecode"> * of `thisArg` and prepends any `partialArgs` to the arguments passed to the</td></tr><tr><td class="codekolom">669</td><td class="codekolom">715</td><td class="bredecode"> * bound function.</td></tr><tr><td class="codekolom">670</td><td class="codekolom">716</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">671</td><td class="codekolom">717</td><td class="bredecode"> * @private</td></tr><tr><td class="codekolom">672</td><td class="codekolom">718</td><td class="bredecode"> * @param {Function|String} func The function to bind or the method name.</td></tr><tr><td class="codekolom">673</td><td class="codekolom">719</td><td class="bredecode"> * @param {Mixed} [thisArg] The `this` binding of `func`.</td></tr><tr><td class="codekolom">674</td><td class="codekolom">720</td><td class="bredecode"> * @param {Array} partialArgs An array of arguments to be partially applied.</td></tr><tr><td class="codekolom">675</td><td class="codekolom">721</td><td class="bredecode"> * @param {Object} [idicator] Used to indicate binding by key or partially</td></tr><tr><td class="codekolom">676</td><td class="codekolom">722</td><td class="bredecode"> * applying arguments from the right.</td></tr><tr><td class="codekolom">677</td><td class="codekolom">723</td><td class="bredecode"> * @returns {Function} Returns the new bound function.</td></tr><tr><td class="codekolom">678</td><td class="codekolom">724</td><td class="bredecode"> */</td></tr><tr><td class="codekolom">679</td><td class="codekolom">725</td><td class="bredecode"> function createBound(func, thisArg, partialArgs, indicator) {</td></tr><tr><td class="codekolom">680</td><td class="codekolom">726</td><td class="bredecode"> var isFunc = isFunction(func),</td></tr><tr><td class="codekolom">681</td><td class="codekolom">727</td><td class="bredecode"> isPartial = !partialArgs,</td></tr><tr><td class="codekolom">682</td><td class="codekolom">728</td><td class="bredecode"> key = thisArg;</td></tr><tr><td class="codekolom">683</td><td class="codekolom">729</td><td class="bredecode"> </td></tr><tr><td class="codekolom">684</td><td class="codekolom">730</td><td class="bredecode"> // juggle arguments</td></tr><tr><td class="codekolom">685</td><td class="codekolom">731</td><td class="bredecode"> if (isPartial) {</td></tr><tr><td class="codekolom">686</td><td class="codekolom">732</td><td class="bredecode"> var rightIndicator = indicator;</td></tr><tr><td class="codekolom">687</td><td class="codekolom">733</td><td class="bredecode"> partialArgs = thisArg;</td></tr><tr><td class="codekolom">688</td><td class="codekolom">734</td><td class="bredecode"> }</td></tr><tr><td class="codekolom">689</td><td class="codekolom">735</td><td class="bredecode"> else if (!isFunc) {</td></tr><tr><td class="codekolom">690</td><td class="codekolom">736</td><td class="bredecode"> if (!indicator) {</td></tr><tr><td class="codekolom">691</td><td class="codekolom">737</td><td class="bredecode"> throw new TypeError;</td></tr><tr><td class="codekolom">692</td><td class="codekolom">738</td><td class="bredecode"> }</td></tr><tr><td class="codekolom">693</td><td class="codekolom">739</td><td class="bredecode"> thisArg = func;</td></tr><tr><td class="codekolom">694</td><td class="codekolom">740</td><td class="bredecode"> }</td></tr><tr><td class="codekolom">695</td><td class="codekolom">741</td><td class="bredecode"> </td></tr><tr><td class="codekolom">696</td><td class="codekolom">742</td><td class="bredecode"> function bound() {</td></tr><tr><td class="codekolom">697</td><td class="codekolom">743</td><td class="bredecode"> // `Function#bind` spec</td></tr><tr><td class="codekolom">698</td><td class="codekolom">744</td><td class="bredecode"> // http://es5.github.com/#x15.3.4.5</td></tr><tr><td class="codekolom">699</td><td class="codekolom">745</td><td class="bredecode"> var args = arguments,</td></tr><tr><td class="codekolom">700</td><td class="codekolom">746</td><td class="bredecode"> thisBinding = isPartial ? this : thisArg;</td></tr><tr><td class="codekolom">701</td><td class="codekolom">747</td><td class="bredecode"> </td></tr><tr><td class="codekolom">702</td><td class="codekolom">748</td><td class="bredecode"> if (!isFunc) {</td></tr><tr><td class="codekolom">703</td><td class="codekolom">749</td><td class="bredecode"> func = thisArg[key];</td></tr><tr><td class="codekolom">704</td><td class="codekolom">750</td><td class="bredecode"> }</td></tr><tr><td class="codekolom">705</td><td class="codekolom">751</td><td class="bredecode"> if (partialArgs.length) {</td></tr><tr><td class="codekolom">706</td><td class="codekolom">752</td><td class="bredecode"> args = args.length</td></tr><tr><td class="codekolom">707</td><td class="codekolom">753</td><td class="bredecode"> ? (args = nativeSlice.call(args), rightIndicator ? args.concat(partialArgs) : partialArgs.concat(args))</td></tr><tr><td class="codekolom">708</td><td class="codekolom">754</td><td class="bredecode"> : partialArgs;</td></tr><tr><td class="codekolom">709</td><td class="codekolom">755</td><td class="bredecode"> }</td></tr><tr><td class="codekolom">710</td><td class="codekolom">756</td><td class="bredecode"> if (this instanceof bound) {</td></tr><tr><td class="codekolom">711</td><td class="codekolom">757</td><td class="bredecode"> // ensure `new bound` is an instance of `func`</td></tr><tr><td class="codekolom">712</td><td class="codekolom">758</td><td class="bredecode"> thisBinding = createObject(func.prototype);</td></tr><tr><td class="codekolom">713</td><td class="codekolom">759</td><td class="bredecode"> </td></tr><tr><td class="codekolom">714</td><td class="codekolom">760</td><td class="bredecode"> // mimic the constructor's `return` behavior</td></tr><tr><td class="codekolom">715</td><td class="codekolom">761</td><td class="bredecode"> // http://es5.github.com/#x13.2.2</td></tr><tr><td class="codekolom">716</td><td class="codekolom">762</td><td class="bredecode"> var result = func.apply(thisBinding, args);</td></tr><tr><td class="codekolom">717</td><td class="codekolom">763</td><td class="bredecode"> return isObject(result) ? result : thisBinding;</td></tr><tr><td class="codekolom">718</td><td class="codekolom">764</td><td class="bredecode"> }</td></tr><tr><td class="codekolom">719</td><td class="codekolom">765</td><td class="bredecode"> return func.apply(thisBinding, args);</td></tr><tr><td class="codekolom">720</td><td class="codekolom">766</td><td class="bredecode"> }</td></tr><tr><td class="codekolom">721</td><td class="codekolom">767</td><td class="bredecode"> return bound;</td></tr><tr><td class="codekolom">722</td><td class="codekolom">768</td><td class="bredecode"> }</td></tr><tr><td class="codekolom">723</td><td class="codekolom">769</td><td class="bredecode"> </td></tr><tr><td class="codekolom">724</td><td class="codekolom">770</td><td class="bredecode"> /**</td></tr><tr><td class="codekolom">725</td><td class="codekolom">771</td><td class="bredecode"> * Creates a new object with the specified `prototype`.</td></tr><tr><td class="codekolom">726</td><td class="codekolom">772</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">727</td><td class="codekolom">773</td><td class="bredecode"> * @private</td></tr><tr><td class="codekolom">728</td><td class="codekolom">774</td><td class="bredecode"> * @param {Object} prototype The prototype object.</td></tr><tr><td class="codekolom">729</td><td class="codekolom">775</td><td class="bredecode"> * @returns {Object} Returns the new object.</td></tr><tr><td class="codekolom">730</td><td class="codekolom">776</td><td class="bredecode"> */</td></tr><tr><td class="codekolom">731</td><td class="codekolom">777</td><td class="bredecode"> function createObject(prototype) {</td></tr><tr><td class="codekolom">732</td><td class="codekolom">778</td><td class="bredecode"> return isObject(prototype) ? nativeCreate(prototype) : {};</td></tr><tr><td class="codekolom">733</td><td class="codekolom">779</td><td class="bredecode"> }</td></tr><tr><td class="codekolom">734</td><td class="codekolom">780</td><td class="bredecode"> </td></tr><tr><td class="codekolom">735</td><td class="codekolom">781</td><td class="bredecode"> /**</td></tr><tr><td class="codekolom">736</td><td class="codekolom">782</td><td class="bredecode"> * Used by `escape` to convert characters to HTML entities.</td></tr><tr><td class="codekolom">737</td><td class="codekolom">783</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">738</td><td class="codekolom">784</td><td class="bredecode"> * @private</td></tr><tr><td class="codekolom">739</td><td class="codekolom">785</td><td class="bredecode"> * @param {String} match The matched character to escape.</td></tr><tr><td class="codekolom">740</td><td class="codekolom">786</td><td class="bredecode"> * @returns {String} Returns the escaped character.</td></tr><tr><td class="codekolom">741</td><td class="codekolom">787</td><td class="bredecode"> */</td></tr><tr><td class="codekolom">742</td><td class="codekolom">788</td><td class="bredecode"> function escapeHtmlChar(match) {</td></tr><tr><td class="codekolom">743</td><td class="codekolom">789</td><td class="bredecode"> return htmlEscapes[match];</td></tr><tr><td class="codekolom">744</td><td class="codekolom">790</td><td class="bredecode"> }</td></tr><tr><td class="codekolom">745</td><td class="codekolom">791</td><td class="bredecode"> </td></tr><tr><td class="codekolom">746</td><td class="codekolom">792</td><td class="bredecode"> /**</td></tr><tr><td class="codekolom">747</td><td class="codekolom">793</td><td class="bredecode"> * Gets the appropriate "indexOf" function. If the `_.indexOf` method is</td></tr><tr><td class="codekolom">748</td><td class="codekolom">794</td><td class="bredecode"> * customized, this method returns the custom method, otherwise it returns</td></tr><tr><td class="codekolom">749</td><td class="codekolom">795</td><td class="bredecode"> * the `basicIndexOf` function.</td></tr><tr><td class="codekolom">750</td><td class="codekolom">796</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">751</td><td class="codekolom">797</td><td class="bredecode"> * @private</td></tr><tr><td class="codekolom">752</td><td class="codekolom">798</td><td class="bredecode"> * @returns {Function} Returns the "indexOf" function.</td></tr><tr><td class="codekolom">753</td><td class="codekolom">799</td><td class="bredecode"> */</td></tr><tr><td class="codekolom">754</td><td class="codekolom">800</td><td class="bredecode"> function getIndexOf(array, value, fromIndex) {</td></tr><tr><td class="codekolom">755</td><td class="codekolom">801</td><td class="bredecode"> var result = (result = lodash.indexOf) === indexOf ? basicIndexOf : result;</td></tr><tr><td class="codekolom">756</td><td class="codekolom">802</td><td class="bredecode"> return result;</td></tr><tr><td class="codekolom">757</td><td class="codekolom">803</td><td class="bredecode"> }</td></tr><tr><td class="codekolom">758</td><td class="codekolom">804</td><td class="bredecode"> </td></tr><tr><td class="codekolom">759</td><td class="codekolom">805</td><td class="bredecode"> /**</td></tr><tr><td class="codekolom">760</td><td class="codekolom">806</td><td class="bredecode"> * Creates a function that juggles arguments, allowing argument overloading</td></tr><tr><td class="codekolom">761</td><td class="codekolom">807</td><td class="bredecode"> * for `_.flatten` and `_.uniq`, before passing them to the given `func`.</td></tr><tr><td class="codekolom">762</td><td class="codekolom">808</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">763</td><td class="codekolom">809</td><td class="bredecode"> * @private</td></tr><tr><td class="codekolom">764</td><td class="codekolom">810</td><td class="bredecode"> * @param {Function} func The function to wrap.</td></tr><tr><td class="codekolom">765</td><td class="codekolom">811</td><td class="bredecode"> * @returns {Function} Returns the new function.</td></tr><tr><td class="codekolom">766</td><td class="codekolom">812</td><td class="bredecode"> */</td></tr><tr><td class="codekolom">767</td><td class="codekolom">813</td><td class="bredecode"> function overloadWrapper(func) {</td></tr><tr><td class="codekolom">768</td><td class="codekolom">814</td><td class="bredecode"> return function(array, flag, callback, thisArg) {</td></tr><tr><td class="codekolom">769</td><td class="codekolom">815</td><td class="bredecode"> // juggle arguments</td></tr><tr><td class="codekolom">770</td><td class="codekolom">816</td><td class="bredecode"> if (typeof flag != 'boolean' &amp;&amp; flag != null) {</td></tr><tr><td class="codekolom">771</td><td class="codekolom">817</td><td class="bredecode"> thisArg = callback;</td></tr><tr><td class="codekolom">772</td><td class="codekolom">818</td><td class="bredecode"> callback = !(thisArg &amp;&amp; thisArg[flag] === array) ? flag : undefined;</td></tr><tr><td class="codekolom">773</td><td class="codekolom">819</td><td class="bredecode"> flag = false;</td></tr><tr><td class="codekolom">774</td><td class="codekolom">820</td><td class="bredecode"> }</td></tr><tr><td class="codekolom">775</td><td class="codekolom">821</td><td class="bredecode"> if (callback != null) {</td></tr><tr><td class="codekolom">776</td><td class="codekolom">822</td><td class="bredecode"> callback = lodash.createCallback(callback, thisArg);</td></tr><tr><td class="codekolom">777</td><td class="codekolom">823</td><td class="bredecode"> }</td></tr><tr><td class="codekolom">778</td><td class="codekolom">824</td><td class="bredecode"> return func(array, flag, callback, thisArg);</td></tr><tr><td class="codekolom">779</td><td class="codekolom">825</td><td class="bredecode"> };</td></tr><tr><td class="codekolom">780</td><td class="codekolom">826</td><td class="bredecode"> }</td></tr><tr><td class="codekolom">781</td><td class="codekolom">827</td><td class="bredecode"> </td></tr><tr><td class="codekolom">782</td><td class="codekolom">828</td><td class="bredecode"> /**</td></tr><tr><td class="codekolom">783</td><td class="codekolom">829</td><td class="bredecode"> * A fallback implementation of `isPlainObject` which checks if a given `value`</td></tr><tr><td class="codekolom">784</td><td class="codekolom">830</td><td class="bredecode"> * is an object created by the `Object` constructor, assuming objects created</td></tr><tr><td class="codekolom">785</td><td class="codekolom">831</td><td class="bredecode"> * by the `Object` constructor have no inherited enumerable properties and that</td></tr><tr><td class="codekolom">786</td><td class="codekolom">832</td><td class="bredecode"> * there are no `Object.prototype` extensions.</td></tr><tr><td class="codekolom">787</td><td class="codekolom">833</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">788</td><td class="codekolom">834</td><td class="bredecode"> * @private</td></tr><tr><td class="codekolom">789</td><td class="codekolom">835</td><td class="bredecode"> * @param {Mixed} value The value to check.</td></tr><tr><td class="codekolom">790</td><td class="codekolom">836</td><td class="bredecode"> * @returns {Boolean} Returns `true`, if `value` is a plain object, else `false`.</td></tr><tr><td class="codekolom">791</td><td class="codekolom">837</td><td class="bredecode"> */</td></tr><tr><td class="codekolom">792</td><td class="codekolom">838</td><td class="bredecode"> function shimIsPlainObject(value) {</td></tr><tr><td class="codekolom">793</td><td class="codekolom">839</td><td class="bredecode"> var ctor,</td></tr><tr><td class="codekolom">794</td><td class="codekolom">840</td><td class="bredecode"> result;</td></tr><tr><td class="codekolom">795</td><td class="codekolom">841</td><td class="bredecode"> </td></tr><tr><td class="codekolom">796</td><td class="codekolom">842</td><td class="bredecode"> // avoid non Object objects, `arguments` objects, and DOM elements</td></tr><tr><td class="codekolom">797</td><td class="codekolom">843</td><td class="bredecode"> if (!(value &amp;&amp; toString.call(value) == objectClass) ||</td></tr><tr><td class="codekolom">798</td><td class="codekolom">844</td><td class="bredecode"> (ctor = value.constructor, isFunction(ctor) &amp;&amp; !(ctor instanceof ctor))) {</td></tr><tr><td class="codekolom">799</td><td class="codekolom">845</td><td class="bredecode"> return false;</td></tr><tr><td class="codekolom">800</td><td class="codekolom">846</td><td class="bredecode"> }</td></tr><tr><td class="codekolom">801</td><td class="codekolom">847</td><td class="bredecode"> // In most environments an object's own properties are iterated before</td></tr><tr><td class="codekolom">802</td><td class="codekolom">848</td><td class="bredecode"> // its inherited properties. If the last iterated property is an object's</td></tr><tr><td class="codekolom">803</td><td class="codekolom">849</td><td class="bredecode"> // own property then there are no inherited enumerable properties.</td></tr><tr><td class="codekolom">804</td><td class="codekolom">850</td><td class="bredecode"> forIn(value, function(value, key) {</td></tr><tr><td class="codekolom">805</td><td class="codekolom">851</td><td class="bredecode"> result = key;</td></tr><tr><td class="codekolom">806</td><td class="codekolom">852</td><td class="bredecode"> });</td></tr><tr><td class="codekolom">807</td><td class="codekolom">853</td><td class="bredecode"> return result === undefined || hasOwnProperty.call(value, result);</td></tr><tr><td class="codekolom">808</td><td class="codekolom">854</td><td class="bredecode"> }</td></tr><tr><td class="codekolom">809</td><td class="codekolom">855</td><td class="bredecode"> </td></tr><tr><td class="codekolom">810</td><td class="codekolom">856</td><td class="bredecode"> /**</td></tr><tr><td class="codekolom">811</td><td class="codekolom">857</td><td class="bredecode"> * Used by `unescape` to convert HTML entities to characters.</td></tr><tr><td class="codekolom">812</td><td class="codekolom">858</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">813</td><td class="codekolom">859</td><td class="bredecode"> * @private</td></tr><tr><td class="codekolom">814</td><td class="codekolom">860</td><td class="bredecode"> * @param {String} match The matched character to unescape.</td></tr><tr><td class="codekolom">815</td><td class="codekolom">861</td><td class="bredecode"> * @returns {String} Returns the unescaped character.</td></tr><tr><td class="codekolom">816</td><td class="codekolom">862</td><td class="bredecode"> */</td></tr><tr><td class="codekolom">817</td><td class="codekolom">863</td><td class="bredecode"> function unescapeHtmlChar(match) {</td></tr><tr><td class="codekolom">818</td><td class="codekolom">864</td><td class="bredecode"> return htmlUnescapes[match];</td></tr><tr><td class="codekolom">819</td><td class="codekolom">865</td><td class="bredecode"> }</td></tr><tr><td class="codekolom">820</td><td class="codekolom">866</td><td class="bredecode"> </td></tr><tr><td class="codekolom">821</td><td class="codekolom">867</td><td class="bredecode"> /*--------------------------------------------------------------------------*/</td></tr><tr><td class="codekolom">822</td><td class="codekolom">868</td><td class="bredecode"> </td></tr><tr><td class="codekolom">823</td><td class="codekolom">869</td><td class="bredecode"> /**</td></tr><tr><td class="codekolom">824</td><td class="codekolom">870</td><td class="bredecode"> * Checks if `value` is an `arguments` object.</td></tr><tr><td class="codekolom">825</td><td class="codekolom">871</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">826</td><td class="codekolom">872</td><td class="bredecode"> * @static</td></tr><tr><td class="codekolom">827</td><td class="codekolom">873</td><td class="bredecode"> * @memberOf _</td></tr><tr><td class="codekolom">828</td><td class="codekolom">874</td><td class="bredecode"> * @category Objects</td></tr><tr><td class="codekolom">829</td><td class="codekolom">875</td><td class="bredecode"> * @param {Mixed} value The value to check.</td></tr><tr><td class="codekolom">830</td><td class="codekolom">876</td><td class="bredecode"> * @returns {Boolean} Returns `true`, if the `value` is an `arguments` object, else `false`.</td></tr><tr><td class="codekolom">831</td><td class="codekolom">877</td><td class="bredecode"> * @example</td></tr><tr><td class="codekolom">832</td><td class="codekolom">878</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">833</td><td class="codekolom">879</td><td class="bredecode"> * (function() { return _.isArguments(arguments); })(1, 2, 3);</td></tr><tr><td class="codekolom">834</td><td class="codekolom">880</td><td class="bredecode"> * // =&gt; true</td></tr><tr><td class="codekolom">835</td><td class="codekolom">881</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">836</td><td class="codekolom">882</td><td class="bredecode"> * _.isArguments([1, 2, 3]);</td></tr><tr><td class="codekolom">837</td><td class="codekolom">883</td><td class="bredecode"> * // =&gt; false</td></tr><tr><td class="codekolom">838</td><td class="codekolom">884</td><td class="bredecode"> */</td></tr><tr><td class="codekolom">839</td><td class="codekolom">885</td><td class="bredecode"> function isArguments(value) {</td></tr><tr><td class="codekolom">840</td><td class="codekolom">886</td><td class="bredecode"> return toString.call(value) == argsClass;</td></tr><tr><td class="codekolom">841</td><td class="codekolom">887</td><td class="bredecode"> }</td></tr><tr><td class="codekolom">842</td><td class="codekolom">888</td><td class="bredecode"> </td></tr><tr><td class="codekolom">843</td><td class="codekolom">889</td><td class="bredecode"> /**</td></tr><tr><td class="codekolom">844</td><td class="codekolom">890</td><td class="bredecode"> * Checks if `value` is an array.</td></tr><tr><td class="codekolom">845</td><td class="codekolom">891</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">846</td><td class="codekolom">892</td><td class="bredecode"> * @static</td></tr><tr><td class="codekolom">847</td><td class="codekolom">893</td><td class="bredecode"> * @memberOf _</td></tr><tr><td class="codekolom">848</td><td class="codekolom">894</td><td class="bredecode"> * @category Objects</td></tr><tr><td class="codekolom">849</td><td class="codekolom">895</td><td class="bredecode"> * @param {Mixed} value The value to check.</td></tr><tr><td class="codekolom">850</td><td class="codekolom">896</td><td class="bredecode"> * @returns {Boolean} Returns `true`, if the `value` is an array, else `false`.</td></tr><tr><td class="codekolom">851</td><td class="codekolom">897</td><td class="bredecode"> * @example</td></tr><tr><td class="codekolom">852</td><td class="codekolom">898</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">853</td><td class="codekolom">899</td><td class="bredecode"> * (function() { return _.isArray(arguments); })();</td></tr><tr><td class="codekolom">854</td><td class="codekolom">900</td><td class="bredecode"> * // =&gt; false</td></tr><tr><td class="codekolom">855</td><td class="codekolom">901</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">856</td><td class="codekolom">902</td><td class="bredecode"> * _.isArray([1, 2, 3]);</td></tr><tr><td class="codekolom">857</td><td class="codekolom">903</td><td class="bredecode"> * // =&gt; true</td></tr><tr><td class="codekolom">858</td><td class="codekolom">904</td><td class="bredecode"> */</td></tr><tr><td class="codekolom">859</td><td class="codekolom">905</td><td class="bredecode"> var isArray = nativeIsArray;</td></tr><tr><td class="codekolom">860</td><td class="codekolom">906</td><td class="bredecode"> </td></tr><tr><td class="codekolom">861</td><td class="codekolom">907</td><td class="bredecode"> /**</td></tr><tr><td class="codekolom">862</td><td class="codekolom">908</td><td class="bredecode"> * A fallback implementation of `Object.keys` which produces an array of the</td></tr><tr><td class="codekolom">863</td><td class="codekolom">909</td><td class="bredecode"> * given object's own enumerable property names.</td></tr><tr><td class="codekolom">864</td><td class="codekolom">910</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">865</td><td class="codekolom">911</td><td class="bredecode"> * @private</td></tr><tr><td class="codekolom">866</td><td class="codekolom">912</td><td class="bredecode"> * @type Function</td></tr><tr><td class="codekolom">867</td><td class="codekolom">913</td><td class="bredecode"> * @param {Object} object The object to inspect.</td></tr><tr><td class="codekolom">868</td><td class="codekolom">914</td><td class="bredecode"> * @returns {Array} Returns a new array of property names.</td></tr><tr><td class="codekolom">869</td><td class="codekolom">915</td><td class="bredecode"> */</td></tr><tr><td class="codekolom">870</td><td class="codekolom">916</td><td class="bredecode"> var shimKeys = function (object) {</td></tr><tr><td class="codekolom">871</td><td class="codekolom">917</td><td class="bredecode"> var index, iterable = object, result = [];</td></tr><tr><td class="codekolom">872</td><td class="codekolom">918</td><td class="bredecode"> if (!iterable) return result;</td></tr><tr><td class="codekolom">873</td><td class="codekolom">919</td><td class="bredecode"> if (!(objectTypes[typeof object])) return result; </td></tr><tr><td class="codekolom">874</td><td class="codekolom">920</td><td class="bredecode"> for (index in iterable) {</td></tr><tr><td class="codekolom">875</td><td class="codekolom">921</td><td class="bredecode"> if (hasOwnProperty.call(iterable, index)) {</td></tr><tr><td class="codekolom">876</td><td class="codekolom">922</td><td class="bredecode"> result.push(index); </td></tr><tr><td class="codekolom">877</td><td class="codekolom">923</td><td class="bredecode"> }</td></tr><tr><td class="codekolom">878</td><td class="codekolom">924</td><td class="bredecode"> } </td></tr><tr><td class="codekolom">879</td><td class="codekolom">925</td><td class="bredecode"> return result</td></tr><tr><td class="codekolom">880</td><td class="codekolom">926</td><td class="bredecode"> };</td></tr><tr><td class="codekolom">881</td><td class="codekolom">927</td><td class="bredecode"> </td></tr><tr><td class="codekolom">882</td><td class="codekolom">928</td><td class="bredecode"> /**</td></tr><tr><td class="codekolom">883</td><td class="codekolom">929</td><td class="bredecode"> * Creates an array composed of the own enumerable property names of `object`.</td></tr><tr><td class="codekolom">884</td><td class="codekolom">930</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">885</td><td class="codekolom">931</td><td class="bredecode"> * @static</td></tr><tr><td class="codekolom">886</td><td class="codekolom">932</td><td class="bredecode"> * @memberOf _</td></tr><tr><td class="codekolom">887</td><td class="codekolom">933</td><td class="bredecode"> * @category Objects</td></tr><tr><td class="codekolom">888</td><td class="codekolom">934</td><td class="bredecode"> * @param {Object} object The object to inspect.</td></tr><tr><td class="codekolom">889</td><td class="codekolom">935</td><td class="bredecode"> * @returns {Array} Returns a new array of property names.</td></tr><tr><td class="codekolom">890</td><td class="codekolom">936</td><td class="bredecode"> * @example</td></tr><tr><td class="codekolom">891</td><td class="codekolom">937</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">892</td><td class="codekolom">938</td><td class="bredecode"> * _.keys({ 'one': 1, 'two': 2, 'three': 3 });</td></tr><tr><td class="codekolom">893</td><td class="codekolom">939</td><td class="bredecode"> * // =&gt; ['one', 'two', 'three'] (order is not guaranteed)</td></tr><tr><td class="codekolom">894</td><td class="codekolom">940</td><td class="bredecode"> */</td></tr><tr><td class="codekolom">895</td><td class="codekolom">941</td><td class="bredecode"> var keys = !nativeKeys ? shimKeys : function(object) {</td></tr><tr><td class="codekolom">896</td><td class="codekolom">942</td><td class="bredecode"> if (!isObject(object)) {</td></tr><tr><td class="codekolom">897</td><td class="codekolom">943</td><td class="bredecode"> return [];</td></tr><tr><td class="codekolom">898</td><td class="codekolom">944</td><td class="bredecode"> }</td></tr><tr><td class="codekolom">899</td><td class="codekolom">945</td><td class="bredecode"> return nativeKeys(object);</td></tr><tr><td class="codekolom">900</td><td class="codekolom">946</td><td class="bredecode"> };</td></tr><tr><td class="codekolom">901</td><td class="codekolom">947</td><td class="bredecode"> </td></tr><tr><td class="codekolom">902</td><td class="codekolom">948</td><td class="bredecode"> /**</td></tr><tr><td class="codekolom">903</td><td class="codekolom">949</td><td class="bredecode"> * Used to convert characters to HTML entities:</td></tr><tr><td class="codekolom">904</td><td class="codekolom">950</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">905</td><td class="codekolom">951</td><td class="bredecode"> * Though the `&gt;` character is escaped for symmetry, characters like `&gt;` and `/`</td></tr><tr><td class="codekolom">906</td><td class="codekolom">952</td><td class="bredecode"> * don't require escaping in HTML and have no special meaning unless they're part</td></tr><tr><td class="codekolom">907</td><td class="codekolom">953</td><td class="bredecode"> * of a tag or an unquoted attribute value.</td></tr><tr><td class="codekolom">908</td><td class="codekolom">954</td><td class="bredecode"> * http://mathiasbynens.be/notes/ambiguous-ampersands (under "semi-related fun fact")</td></tr><tr><td class="codekolom">909</td><td class="codekolom">955</td><td class="bredecode"> */</td></tr><tr><td class="codekolom">910</td><td class="codekolom">956</td><td class="bredecode"> var htmlEscapes = {</td></tr><tr><td class="codekolom">911</td><td class="codekolom">957</td><td class="bredecode"> '&amp;': '&amp;amp;',</td></tr><tr><td class="codekolom">912</td><td class="codekolom">958</td><td class="bredecode"> '&lt;': '&amp;lt;',</td></tr><tr><td class="codekolom">913</td><td class="codekolom">959</td><td class="bredecode"> '&gt;': '&amp;gt;',</td></tr><tr><td class="codekolom">914</td><td class="codekolom">960</td><td class="bredecode"> '"': '&amp;quot;',</td></tr><tr><td class="codekolom">915</td><td class="codekolom">961</td><td class="bredecode"> "'": '&amp;#39;'</td></tr><tr><td class="codekolom">916</td><td class="codekolom">962</td><td class="bredecode"> };</td></tr><tr><td class="codekolom">917</td><td class="codekolom">963</td><td class="bredecode"> </td></tr><tr><td class="codekolom">918</td><td class="codekolom">964</td><td class="bredecode"> /** Used to convert HTML entities to characters */</td></tr><tr><td class="codekolom">919</td><td class="codekolom">965</td><td class="bredecode"> var htmlUnescapes = invert(htmlEscapes);</td></tr><tr><td class="codekolom">920</td><td class="codekolom">966</td><td class="bredecode"> </td></tr><tr><td class="codekolom">921</td><td class="codekolom">967</td><td class="bredecode"> /*--------------------------------------------------------------------------*/</td></tr><tr><td class="codekolom">922</td><td class="codekolom">968</td><td class="bredecode"> </td></tr><tr><td class="codekolom">923</td><td class="codekolom">969</td><td class="bredecode"> /**</td></tr><tr><td class="codekolom">924</td><td class="codekolom">970</td><td class="bredecode"> * Assigns own enumerable properties of source object(s) to the destination</td></tr><tr><td class="codekolom">925</td><td class="codekolom">971</td><td class="bredecode"> * object. Subsequent sources will overwrite property assignments of previous</td></tr><tr><td class="codekolom">926</td><td class="codekolom">972</td><td class="bredecode"> * sources. If a `callback` function is passed, it will be executed to produce</td></tr><tr><td class="codekolom">927</td><td class="codekolom">973</td><td class="bredecode"> * the assigned values. The `callback` is bound to `thisArg` and invoked with</td></tr><tr><td class="codekolom">928</td><td class="codekolom">974</td><td class="bredecode"> * two arguments; (objectValue, sourceValue).</td></tr><tr><td class="codekolom">929</td><td class="codekolom">975</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">930</td><td class="codekolom">976</td><td class="bredecode"> * @static</td></tr><tr><td class="codekolom">931</td><td class="codekolom">977</td><td class="bredecode"> * @memberOf _</td></tr><tr><td class="codekolom">932</td><td class="codekolom">978</td><td class="bredecode"> * @type Function</td></tr><tr><td class="codekolom">933</td><td class="codekolom">979</td><td class="bredecode"> * @alias extend</td></tr><tr><td class="codekolom">934</td><td class="codekolom">980</td><td class="bredecode"> * @category Objects</td></tr><tr><td class="codekolom">935</td><td class="codekolom">981</td><td class="bredecode"> * @param {Object} object The destination object.</td></tr><tr><td class="codekolom">936</td><td class="codekolom">982</td><td class="bredecode"> * @param {Object} [source1, source2, ...] The source objects.</td></tr><tr><td class="codekolom">937</td><td class="codekolom">983</td><td class="bredecode"> * @param {Function} [callback] The function to customize assigning values.</td></tr><tr><td class="codekolom">938</td><td class="codekolom">984</td><td class="bredecode"> * @param {Mixed} [thisArg] The `this` binding of `callback`.</td></tr><tr><td class="codekolom">939</td><td class="codekolom">985</td><td class="bredecode"> * @returns {Object} Returns the destination object.</td></tr><tr><td class="codekolom">940</td><td class="codekolom">986</td><td class="bredecode"> * @example</td></tr><tr><td class="codekolom">941</td><td class="codekolom">987</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">942</td><td class="codekolom">988</td><td class="bredecode"> * _.assign({ 'name': 'moe' }, { 'age': 40 });</td></tr><tr><td class="codekolom">943</td><td class="codekolom">989</td><td class="bredecode"> * // =&gt; { 'name': 'moe', 'age': 40 }</td></tr><tr><td class="codekolom">944</td><td class="codekolom">990</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">945</td><td class="codekolom">991</td><td class="bredecode"> * var defaults = _.partialRight(_.assign, function(a, b) {</td></tr><tr><td class="codekolom">946</td><td class="codekolom">992</td><td class="bredecode"> * return typeof a == 'undefined' ? b : a;</td></tr><tr><td class="codekolom">947</td><td class="codekolom">993</td><td class="bredecode"> * });</td></tr><tr><td class="codekolom">948</td><td class="codekolom">994</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">949</td><td class="codekolom">995</td><td class="bredecode"> * var food = { 'name': 'apple' };</td></tr><tr><td class="codekolom">950</td><td class="codekolom">996</td><td class="bredecode"> * defaults(food, { 'name': 'banana', 'type': 'fruit' });</td></tr><tr><td class="codekolom">951</td><td class="codekolom">997</td><td class="bredecode"> * // =&gt; { 'name': 'apple', 'type': 'fruit' }</td></tr><tr><td class="codekolom">952</td><td class="codekolom">998</td><td class="bredecode"> */</td></tr><tr><td class="codekolom">953</td><td class="codekolom">999</td><td class="bredecode"> var assign = function (object, source, guard) {</td></tr><tr><td class="codekolom">954</td><td class="codekolom">1000</td><td class="bredecode"> var index, iterable = object, result = iterable;</td></tr><tr><td class="codekolom">955</td><td class="codekolom">1001</td><td class="bredecode"> if (!iterable) return result;</td></tr><tr><td class="codekolom">956</td><td class="codekolom">1002</td><td class="bredecode"> var args = arguments,</td></tr><tr><td class="codekolom">957</td><td class="codekolom">1003</td><td class="bredecode"> argsIndex = 0,</td></tr><tr><td class="codekolom">958</td><td class="codekolom">1004</td><td class="bredecode"> argsLength = typeof guard == 'number' ? 2 : args.length;</td></tr><tr><td class="codekolom">959</td><td class="codekolom">1005</td><td class="bredecode"> if (argsLength &gt; 3 &amp;&amp; typeof args[argsLength - 2] == 'function') {</td></tr><tr><td class="codekolom">960</td><td class="codekolom">1006</td><td class="bredecode"> var callback = lodash.createCallback(args[--argsLength - 1], args[argsLength--], 2);</td></tr><tr><td class="codekolom">961</td><td class="codekolom">1007</td><td class="bredecode"> } else if (argsLength &gt; 2 &amp;&amp; typeof args[argsLength - 1] == 'function') {</td></tr><tr><td class="codekolom">962</td><td class="codekolom">1008</td><td class="bredecode"> callback = args[--argsLength];</td></tr><tr><td class="codekolom">963</td><td class="codekolom">1009</td><td class="bredecode"> }</td></tr><tr><td class="codekolom">964</td><td class="codekolom">1010</td><td class="bredecode"> while (++argsIndex &lt; argsLength) {</td></tr><tr><td class="codekolom">965</td><td class="codekolom">1011</td><td class="bredecode"> iterable = args[argsIndex];</td></tr><tr><td class="codekolom">966</td><td class="codekolom">1012</td><td class="bredecode"> if (iterable &amp;&amp; objectTypes[typeof iterable]) { </td></tr><tr><td class="codekolom">967</td><td class="codekolom">1013</td><td class="bredecode"> var ownIndex = -1,</td></tr><tr><td class="codekolom">968</td><td class="codekolom">1014</td><td class="bredecode"> ownProps = objectTypes[typeof iterable] &amp;&amp; keys(iterable),</td></tr><tr><td class="codekolom">969</td><td class="codekolom">1015</td><td class="bredecode"> length = ownProps ? ownProps.length : 0;</td></tr><tr><td class="codekolom">970</td><td class="codekolom">1016</td><td class="bredecode"> </td></tr><tr><td class="codekolom">971</td><td class="codekolom">1017</td><td class="bredecode"> while (++ownIndex &lt; length) {</td></tr><tr><td class="codekolom">972</td><td class="codekolom">1018</td><td class="bredecode"> index = ownProps[ownIndex];</td></tr><tr><td class="codekolom">973</td><td class="codekolom">1019</td><td class="bredecode"> result[index] = callback ? callback(result[index], iterable[index]) : iterable[index]; </td></tr><tr><td class="codekolom">974</td><td class="codekolom">1020</td><td class="bredecode"> } </td></tr><tr><td class="codekolom">975</td><td class="codekolom">1021</td><td class="bredecode"> }</td></tr><tr><td class="codekolom">976</td><td class="codekolom">1022</td><td class="bredecode"> }</td></tr><tr><td class="codekolom">977</td><td class="codekolom">1023</td><td class="bredecode"> return result</td></tr><tr><td class="codekolom">978</td><td class="codekolom">1024</td><td class="bredecode"> };</td></tr><tr><td class="codekolom">979</td><td class="codekolom">1025</td><td class="bredecode"> </td></tr><tr><td class="codekolom">980</td><td class="codekolom">1026</td><td class="bredecode"> /**</td></tr><tr><td class="codekolom">981</td><td class="codekolom">1027</td><td class="bredecode"> * Creates a clone of `value`. If `deep` is `true`, nested objects will also</td></tr><tr><td class="codekolom">982</td><td class="codekolom">1028</td><td class="bredecode"> * be cloned, otherwise they will be assigned by reference. If a `callback`</td></tr><tr><td class="codekolom">983</td><td class="codekolom">1029</td><td class="bredecode"> * function is passed, it will be executed to produce the cloned values. If</td></tr><tr><td class="codekolom">984</td><td class="codekolom">1030</td><td class="bredecode"> * `callback` returns `undefined`, cloning will be handled by the method instead.</td></tr><tr><td class="codekolom">985</td><td class="codekolom">1031</td><td class="bredecode"> * The `callback` is bound to `thisArg` and invoked with one argument; (value).</td></tr><tr><td class="codekolom">986</td><td class="codekolom">1032</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">987</td><td class="codekolom">1033</td><td class="bredecode"> * @static</td></tr><tr><td class="codekolom">988</td><td class="codekolom">1034</td><td class="bredecode"> * @memberOf _</td></tr><tr><td class="codekolom">989</td><td class="codekolom">1035</td><td class="bredecode"> * @category Objects</td></tr><tr><td class="codekolom">990</td><td class="codekolom">1036</td><td class="bredecode"> * @param {Mixed} value The value to clone.</td></tr><tr><td class="codekolom">991</td><td class="codekolom">1037</td><td class="bredecode"> * @param {Boolean} [deep=false] A flag to indicate a deep clone.</td></tr><tr><td class="codekolom">992</td><td class="codekolom">1038</td><td class="bredecode"> * @param {Function} [callback] The function to customize cloning values.</td></tr><tr><td class="codekolom">993</td><td class="codekolom">1039</td><td class="bredecode"> * @param {Mixed} [thisArg] The `this` binding of `callback`.</td></tr><tr><td class="codekolom">994</td><td class="codekolom">1040</td><td class="bredecode"> * @param- {Array} [stackA=[]] Tracks traversed source objects.</td></tr><tr><td class="codekolom">995</td><td class="codekolom">1041</td><td class="bredecode"> * @param- {Array} [stackB=[]] Associates clones with source counterparts.</td></tr><tr><td class="codekolom">996</td><td class="codekolom">1042</td><td class="bredecode"> * @returns {Mixed} Returns the cloned `value`.</td></tr><tr><td class="codekolom">997</td><td class="codekolom">1043</td><td class="bredecode"> * @example</td></tr><tr><td class="codekolom">998</td><td class="codekolom">1044</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">999</td><td class="codekolom">1045</td><td class="bredecode"> * var stooges = [</td></tr><tr><td class="codekolom">1000</td><td class="codekolom">1046</td><td class="bredecode"> * { 'name': 'moe', 'age': 40 },</td></tr><tr><td class="codekolom">1001</td><td class="codekolom">1047</td><td class="bredecode"> * { 'name': 'larry', 'age': 50 }</td></tr><tr><td class="codekolom">1002</td><td class="codekolom">1048</td><td class="bredecode"> * ];</td></tr><tr><td class="codekolom">1003</td><td class="codekolom">1049</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">1004</td><td class="codekolom">1050</td><td class="bredecode"> * var shallow = _.clone(stooges);</td></tr><tr><td class="codekolom">1005</td><td class="codekolom">1051</td><td class="bredecode"> * shallow[0] === stooges[0];</td></tr><tr><td class="codekolom">1006</td><td class="codekolom">1052</td><td class="bredecode"> * // =&gt; true</td></tr><tr><td class="codekolom">1007</td><td class="codekolom">1053</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">1008</td><td class="codekolom">1054</td><td class="bredecode"> * var deep = _.clone(stooges, true);</td></tr><tr><td class="codekolom">1009</td><td class="codekolom">1055</td><td class="bredecode"> * deep[0] === stooges[0];</td></tr><tr><td class="codekolom">1010</td><td class="codekolom">1056</td><td class="bredecode"> * // =&gt; false</td></tr><tr><td class="codekolom">1011</td><td class="codekolom">1057</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">1012</td><td class="codekolom">1058</td><td class="bredecode"> * _.mixin({</td></tr><tr><td class="codekolom">1013</td><td class="codekolom">1059</td><td class="bredecode"> * 'clone': _.partialRight(_.clone, function(value) {</td></tr><tr><td class="codekolom">1014</td><td class="codekolom">1060</td><td class="bredecode"> * return _.isElement(value) ? value.cloneNode(false) : undefined;</td></tr><tr><td class="codekolom">1015</td><td class="codekolom">1061</td><td class="bredecode"> * })</td></tr><tr><td class="codekolom">1016</td><td class="codekolom">1062</td><td class="bredecode"> * });</td></tr><tr><td class="codekolom">1017</td><td class="codekolom">1063</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">1018</td><td class="codekolom">1064</td><td class="bredecode"> * var clone = _.clone(document.body);</td></tr><tr><td class="codekolom">1019</td><td class="codekolom">1065</td><td class="bredecode"> * clone.childNodes.length;</td></tr><tr><td class="codekolom">1020</td><td class="codekolom">1066</td><td class="bredecode"> * // =&gt; 0</td></tr><tr><td class="codekolom">1021</td><td class="codekolom">1067</td><td class="bredecode"> */</td></tr><tr><td class="codekolom">1022</td><td class="codekolom">1068</td><td class="bredecode"> function clone(value, deep, callback, thisArg, stackA, stackB) {</td></tr><tr><td class="codekolom">1023</td><td class="codekolom">1069</td><td class="bredecode"> var result = value;</td></tr><tr><td class="codekolom">1024</td><td class="codekolom">1070</td><td class="bredecode"> </td></tr><tr><td class="codekolom">1025</td><td class="codekolom">1071</td><td class="bredecode"> // allows working with "Collections" methods without using their `callback`</td></tr><tr><td class="codekolom">1026</td><td class="codekolom">1072</td><td class="bredecode"> // argument, `index|key`, for this method's `callback`</td></tr><tr><td class="codekolom">1027</td><td class="codekolom">1073</td><td class="bredecode"> if (typeof deep != 'boolean' &amp;&amp; deep != null) {</td></tr><tr><td class="codekolom">1028</td><td class="codekolom">1074</td><td class="bredecode"> thisArg = callback;</td></tr><tr><td class="codekolom">1029</td><td class="codekolom">1075</td><td class="bredecode"> callback = deep;</td></tr><tr><td class="codekolom">1030</td><td class="codekolom">1076</td><td class="bredecode"> deep = false;</td></tr><tr><td class="codekolom">1031</td><td class="codekolom">1077</td><td class="bredecode"> }</td></tr><tr><td class="codekolom">1032</td><td class="codekolom">1078</td><td class="bredecode"> if (typeof callback == 'function') {</td></tr><tr><td class="codekolom">1033</td><td class="codekolom">1079</td><td class="bredecode"> callback = (typeof thisArg == 'undefined')</td></tr><tr><td class="codekolom">1034</td><td class="codekolom">1080</td><td class="bredecode"> ? callback</td></tr><tr><td class="codekolom">1035</td><td class="codekolom">1081</td><td class="bredecode"> : lodash.createCallback(callback, thisArg, 1);</td></tr><tr><td class="codekolom">1036</td><td class="codekolom">1082</td><td class="bredecode"> </td></tr><tr><td class="codekolom">1037</td><td class="codekolom">1083</td><td class="bredecode"> result = callback(result);</td></tr><tr><td class="codekolom">1038</td><td class="codekolom">1084</td><td class="bredecode"> if (typeof result != 'undefined') {</td></tr><tr><td class="codekolom">1039</td><td class="codekolom">1085</td><td class="bredecode"> return result;</td></tr><tr><td class="codekolom">1040</td><td class="codekolom">1086</td><td class="bredecode"> }</td></tr><tr><td class="codekolom">1041</td><td class="codekolom">1087</td><td class="bredecode"> result = value;</td></tr><tr><td class="codekolom">1042</td><td class="codekolom">1088</td><td class="bredecode"> }</td></tr><tr><td class="codekolom">1043</td><td class="codekolom">1089</td><td class="bredecode"> // inspect [[Class]]</td></tr><tr><td class="codekolom">1044</td><td class="codekolom">1090</td><td class="bredecode"> var isObj = isObject(result);</td></tr><tr><td class="codekolom">1045</td><td class="codekolom">1091</td><td class="bredecode"> if (isObj) {</td></tr><tr><td class="codekolom">1046</td><td class="codekolom">1092</td><td class="bredecode"> var className = toString.call(result);</td></tr><tr><td class="codekolom">1047</td><td class="codekolom">1093</td><td class="bredecode"> if (!cloneableClasses[className]) {</td></tr><tr><td class="codekolom">1048</td><td class="codekolom">1094</td><td class="bredecode"> return result;</td></tr><tr><td class="codekolom">1049</td><td class="codekolom">1095</td><td class="bredecode"> }</td></tr><tr><td class="codekolom">1050</td><td class="codekolom">1096</td><td class="bredecode"> var isArr = isArray(result);</td></tr><tr><td class="codekolom">1051</td><td class="codekolom">1097</td><td class="bredecode"> }</td></tr><tr><td class="codekolom">1052</td><td class="codekolom">1098</td><td class="bredecode"> // shallow clone</td></tr><tr><td class="codekolom">1053</td><td class="codekolom">1099</td><td class="bredecode"> if (!isObj || !deep) {</td></tr><tr><td class="codekolom">1054</td><td class="codekolom">1100</td><td class="bredecode"> return isObj</td></tr><tr><td class="codekolom">1055</td><td class="codekolom">1101</td><td class="bredecode"> ? (isArr ? slice(result) : assign({}, result))</td></tr><tr><td class="codekolom">1056</td><td class="codekolom">1102</td><td class="bredecode"> : result;</td></tr><tr><td class="codekolom">1057</td><td class="codekolom">1103</td><td class="bredecode"> }</td></tr><tr><td class="codekolom">1058</td><td class="codekolom">1104</td><td class="bredecode"> var ctor = ctorByClass[className];</td></tr><tr><td class="codekolom">1059</td><td class="codekolom">1105</td><td class="bredecode"> switch (className) {</td></tr><tr><td class="codekolom">1060</td><td class="codekolom">1106</td><td class="bredecode"> case boolClass:</td></tr><tr><td class="codekolom">1061</td><td class="codekolom">1107</td><td class="bredecode"> case dateClass:</td></tr><tr><td class="codekolom">1062</td><td class="codekolom">1108</td><td class="bredecode"> return new ctor(+result);</td></tr><tr><td class="codekolom">1063</td><td class="codekolom">1109</td><td class="bredecode"> </td></tr><tr><td class="codekolom">1064</td><td class="codekolom">1110</td><td class="bredecode"> case numberClass:</td></tr><tr><td class="codekolom">1065</td><td class="codekolom">1111</td><td class="bredecode"> case stringClass:</td></tr><tr><td class="codekolom">1066</td><td class="codekolom">1112</td><td class="bredecode"> return new ctor(result);</td></tr><tr><td class="codekolom">1067</td><td class="codekolom">1113</td><td class="bredecode"> </td></tr><tr><td class="codekolom">1068</td><td class="codekolom">1114</td><td class="bredecode"> case regexpClass:</td></tr><tr><td class="codekolom">1069</td><td class="codekolom">1115</td><td class="bredecode"> return ctor(result.source, reFlags.exec(result));</td></tr><tr><td class="codekolom">1070</td><td class="codekolom">1116</td><td class="bredecode"> }</td></tr><tr><td class="codekolom">1071</td><td class="codekolom">1117</td><td class="bredecode"> // check for circular references and return corresponding clone</td></tr><tr><td class="codekolom">1072</td><td class="codekolom">1118</td><td class="bredecode"> var initedStack = !stackA;</td></tr><tr><td class="codekolom">1073</td><td class="codekolom">1119</td><td class="bredecode"> stackA || (stackA = getArray());</td></tr><tr><td class="codekolom">1074</td><td class="codekolom">1120</td><td class="bredecode"> stackB || (stackB = getArray());</td></tr><tr><td class="codekolom">1075</td><td class="codekolom">1121</td><td class="bredecode"> </td></tr><tr><td class="codekolom">1076</td><td class="codekolom">1122</td><td class="bredecode"> var length = stackA.length;</td></tr><tr><td class="codekolom">1077</td><td class="codekolom">1123</td><td class="bredecode"> while (length--) {</td></tr><tr><td class="codekolom">1078</td><td class="codekolom">1124</td><td class="bredecode"> if (stackA[length] == value) {</td></tr><tr><td class="codekolom">1079</td><td class="codekolom">1125</td><td class="bredecode"> return stackB[length];</td></tr><tr><td class="codekolom">1080</td><td class="codekolom">1126</td><td class="bredecode"> }</td></tr><tr><td class="codekolom">1081</td><td class="codekolom">1127</td><td class="bredecode"> }</td></tr><tr><td class="codekolom">1082</td><td class="codekolom">1128</td><td class="bredecode"> // init cloned object</td></tr><tr><td class="codekolom">1083</td><td class="codekolom">1129</td><td class="bredecode"> result = isArr ? ctor(result.length) : {};</td></tr><tr><td class="codekolom">1084</td><td class="codekolom">1130</td><td class="bredecode"> </td></tr><tr><td class="codekolom">1085</td><td class="codekolom">1131</td><td class="bredecode"> // add array properties assigned by `RegExp#exec`</td></tr><tr><td class="codekolom">1086</td><td class="codekolom">1132</td><td class="bredecode"> if (isArr) {</td></tr><tr><td class="codekolom">1087</td><td class="codekolom">1133</td><td class="bredecode"> if (hasOwnProperty.call(value, 'index')) {</td></tr><tr><td class="codekolom">1088</td><td class="codekolom">1134</td><td class="bredecode"> result.index = value.index;</td></tr><tr><td class="codekolom">1089</td><td class="codekolom">1135</td><td class="bredecode"> }</td></tr><tr><td class="codekolom">1090</td><td class="codekolom">1136</td><td class="bredecode"> if (hasOwnProperty.call(value, 'input')) {</td></tr><tr><td class="codekolom">1091</td><td class="codekolom">1137</td><td class="bredecode"> result.input = value.input;</td></tr><tr><td class="codekolom">1092</td><td class="codekolom">1138</td><td class="bredecode"> }</td></tr><tr><td class="codekolom">1093</td><td class="codekolom">1139</td><td class="bredecode"> }</td></tr><tr><td class="codekolom">1094</td><td class="codekolom">1140</td><td class="bredecode"> // add the source value to the stack of traversed objects</td></tr><tr><td class="codekolom">1095</td><td class="codekolom">1141</td><td class="bredecode"> // and associate it with its clone</td></tr><tr><td class="codekolom">1096</td><td class="codekolom">1142</td><td class="bredecode"> stackA.push(value);</td></tr><tr><td class="codekolom">1097</td><td class="codekolom">1143</td><td class="bredecode"> stackB.push(result);</td></tr><tr><td class="codekolom">1098</td><td class="codekolom">1144</td><td class="bredecode"> </td></tr><tr><td class="codekolom">1099</td><td class="codekolom">1145</td><td class="bredecode"> // recursively populate clone (susceptible to call stack limits)</td></tr><tr><td class="codekolom">1100</td><td class="codekolom">1146</td><td class="bredecode"> (isArr ? forEach : forOwn)(value, function(objValue, key) {</td></tr><tr><td class="codekolom">1101</td><td class="codekolom">1147</td><td class="bredecode"> result[key] = clone(objValue, deep, callback, undefined, stackA, stackB);</td></tr><tr><td class="codekolom">1102</td><td class="codekolom">1148</td><td class="bredecode"> });</td></tr><tr><td class="codekolom">1103</td><td class="codekolom">1149</td><td class="bredecode"> </td></tr><tr><td class="codekolom">1104</td><td class="codekolom">1150</td><td class="bredecode"> if (initedStack) {</td></tr><tr><td class="codekolom">1105</td><td class="codekolom">1151</td><td class="bredecode"> releaseArray(stackA);</td></tr><tr><td class="codekolom">1106</td><td class="codekolom">1152</td><td class="bredecode"> releaseArray(stackB);</td></tr><tr><td class="codekolom">1107</td><td class="codekolom">1153</td><td class="bredecode"> }</td></tr><tr><td class="codekolom">1108</td><td class="codekolom">1154</td><td class="bredecode"> return result;</td></tr><tr><td class="codekolom">1109</td><td class="codekolom">1155</td><td class="bredecode"> }</td></tr><tr><td class="codekolom">1110</td><td class="codekolom">1156</td><td class="bredecode"> </td></tr><tr><td class="codekolom">1111</td><td class="codekolom">1157</td><td class="bredecode"> /**</td></tr><tr><td class="codekolom">1112</td><td class="codekolom">1158</td><td class="bredecode"> * Creates a deep clone of `value`. If a `callback` function is passed,</td></tr><tr><td class="codekolom">1113</td><td class="codekolom">1159</td><td class="bredecode"> * it will be executed to produce the cloned values. If `callback` returns</td></tr><tr><td class="codekolom">1114</td><td class="codekolom">1160</td><td class="bredecode"> * `undefined`, cloning will be handled by the method instead. The `callback`</td></tr><tr><td class="codekolom">1115</td><td class="codekolom">1161</td><td class="bredecode"> * is bound to `thisArg` and invoked with one argument; (value).</td></tr><tr><td class="codekolom">1116</td><td class="codekolom">1162</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">1117</td><td class="codekolom">1163</td><td class="bredecode"> * Note: This method is loosely based on the structured clone algorithm. Functions</td></tr><tr><td class="codekolom">1118</td><td class="codekolom">1164</td><td class="bredecode"> * and DOM nodes are **not** cloned. The enumerable properties of `arguments` objects and</td></tr><tr><td class="codekolom">1119</td><td class="codekolom">1165</td><td class="bredecode"> * objects created by constructors other than `Object` are cloned to plain `Object` objects.</td></tr><tr><td class="codekolom">1120</td><td class="codekolom">1166</td><td class="bredecode"> * See http://www.w3.org/TR/html5/infrastructure.html#internal-structured-cloning-algorithm.</td></tr><tr><td class="codekolom">1121</td><td class="codekolom">1167</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">1122</td><td class="codekolom">1168</td><td class="bredecode"> * @static</td></tr><tr><td class="codekolom">1123</td><td class="codekolom">1169</td><td class="bredecode"> * @memberOf _</td></tr><tr><td class="codekolom">1124</td><td class="codekolom">1170</td><td class="bredecode"> * @category Objects</td></tr><tr><td class="codekolom">1125</td><td class="codekolom">1171</td><td class="bredecode"> * @param {Mixed} value The value to deep clone.</td></tr><tr><td class="codekolom">1126</td><td class="codekolom">1172</td><td class="bredecode"> * @param {Function} [callback] The function to customize cloning values.</td></tr><tr><td class="codekolom">1127</td><td class="codekolom">1173</td><td class="bredecode"> * @param {Mixed} [thisArg] The `this` binding of `callback`.</td></tr><tr><td class="codekolom">1128</td><td class="codekolom">1174</td><td class="bredecode"> * @returns {Mixed} Returns the deep cloned `value`.</td></tr><tr><td class="codekolom">1129</td><td class="codekolom">1175</td><td class="bredecode"> * @example</td></tr><tr><td class="codekolom">1130</td><td class="codekolom">1176</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">1131</td><td class="codekolom">1177</td><td class="bredecode"> * var stooges = [</td></tr><tr><td class="codekolom">1132</td><td class="codekolom">1178</td><td class="bredecode"> * { 'name': 'moe', 'age': 40 },</td></tr><tr><td class="codekolom">1133</td><td class="codekolom">1179</td><td class="bredecode"> * { 'name': 'larry', 'age': 50 }</td></tr><tr><td class="codekolom">1134</td><td class="codekolom">1180</td><td class="bredecode"> * ];</td></tr><tr><td class="codekolom">1135</td><td class="codekolom">1181</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">1136</td><td class="codekolom">1182</td><td class="bredecode"> * var deep = _.cloneDeep(stooges);</td></tr><tr><td class="codekolom">1137</td><td class="codekolom">1183</td><td class="bredecode"> * deep[0] === stooges[0];</td></tr><tr><td class="codekolom">1138</td><td class="codekolom">1184</td><td class="bredecode"> * // =&gt; false</td></tr><tr><td class="codekolom">1139</td><td class="codekolom">1185</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">1140</td><td class="codekolom">1186</td><td class="bredecode"> * var view = {</td></tr><tr><td class="codekolom">1141</td><td class="codekolom">1187</td><td class="bredecode"> * 'label': 'docs',</td></tr><tr><td class="codekolom">1142</td><td class="codekolom">1188</td><td class="bredecode"> * 'node': element</td></tr><tr><td class="codekolom">1143</td><td class="codekolom">1189</td><td class="bredecode"> * };</td></tr><tr><td class="codekolom">1144</td><td class="codekolom">1190</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">1145</td><td class="codekolom">1191</td><td class="bredecode"> * var clone = _.cloneDeep(view, function(value) {</td></tr><tr><td class="codekolom">1146</td><td class="codekolom">1192</td><td class="bredecode"> * return _.isElement(value) ? value.cloneNode(true) : undefined;</td></tr><tr><td class="codekolom">1147</td><td class="codekolom">1193</td><td class="bredecode"> * });</td></tr><tr><td class="codekolom">1148</td><td class="codekolom">1194</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">1149</td><td class="codekolom">1195</td><td class="bredecode"> * clone.node == view.node;</td></tr><tr><td class="codekolom">1150</td><td class="codekolom">1196</td><td class="bredecode"> * // =&gt; false</td></tr><tr><td class="codekolom">1151</td><td class="codekolom">1197</td><td class="bredecode"> */</td></tr><tr><td class="codekolom">1152</td><td class="codekolom">1198</td><td class="bredecode"> function cloneDeep(value, callback, thisArg) {</td></tr><tr><td class="codekolom">1153</td><td class="codekolom">1199</td><td class="bredecode"> return clone(value, true, callback, thisArg);</td></tr><tr><td class="codekolom">1154</td><td class="codekolom">1200</td><td class="bredecode"> }</td></tr><tr><td class="codekolom">1155</td><td class="codekolom">1201</td><td class="bredecode"> </td></tr><tr><td class="codekolom">1156</td><td class="codekolom">1202</td><td class="bredecode"> /**</td></tr><tr><td class="codekolom">1157</td><td class="codekolom">1203</td><td class="bredecode"> * Assigns own enumerable properties of source object(s) to the destination</td></tr><tr><td class="codekolom">1158</td><td class="codekolom">1204</td><td class="bredecode"> * object for all destination properties that resolve to `undefined`. Once a</td></tr><tr><td class="codekolom">1159</td><td class="codekolom">1205</td><td class="bredecode"> * property is set, additional defaults of the same property will be ignored.</td></tr><tr><td class="codekolom">1160</td><td class="codekolom">1206</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">1161</td><td class="codekolom">1207</td><td class="bredecode"> * @static</td></tr><tr><td class="codekolom">1162</td><td class="codekolom">1208</td><td class="bredecode"> * @memberOf _</td></tr><tr><td class="codekolom">1163</td><td class="codekolom">1209</td><td class="bredecode"> * @type Function</td></tr><tr><td class="codekolom">1164</td><td class="codekolom">1210</td><td class="bredecode"> * @category Objects</td></tr><tr><td class="codekolom">1165</td><td class="codekolom">1211</td><td class="bredecode"> * @param {Object} object The destination object.</td></tr><tr><td class="codekolom">1166</td><td class="codekolom">1212</td><td class="bredecode"> * @param {Object} [source1, source2, ...] The source objects.</td></tr><tr><td class="codekolom">1167</td><td class="codekolom">1213</td><td class="bredecode"> * @param- {Object} [guard] Allows working with `_.reduce` without using its</td></tr><tr><td class="codekolom">1168</td><td class="codekolom">1214</td><td class="bredecode"> * callback's `key` and `object` arguments as sources.</td></tr><tr><td class="codekolom">1169</td><td class="codekolom">1215</td><td class="bredecode"> * @returns {Object} Returns the destination object.</td></tr><tr><td class="codekolom">1170</td><td class="codekolom">1216</td><td class="bredecode"> * @example</td></tr><tr><td class="codekolom">1171</td><td class="codekolom">1217</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">1172</td><td class="codekolom">1218</td><td class="bredecode"> * var food = { 'name': 'apple' };</td></tr><tr><td class="codekolom">1173</td><td class="codekolom">1219</td><td class="bredecode"> * _.defaults(food, { 'name': 'banana', 'type': 'fruit' });</td></tr><tr><td class="codekolom">1174</td><td class="codekolom">1220</td><td class="bredecode"> * // =&gt; { 'name': 'apple', 'type': 'fruit' }</td></tr><tr><td class="codekolom">1175</td><td class="codekolom">1221</td><td class="bredecode"> */</td></tr><tr><td class="codekolom">1176</td><td class="codekolom">1222</td><td class="bredecode"> var defaults = function (object, source, guard) {</td></tr><tr><td class="codekolom">1177</td><td class="codekolom">1223</td><td class="bredecode"> var index, iterable = object, result = iterable;</td></tr><tr><td class="codekolom">1178</td><td class="codekolom">1224</td><td class="bredecode"> if (!iterable) return result;</td></tr><tr><td class="codekolom">1179</td><td class="codekolom">1225</td><td class="bredecode"> var args = arguments,</td></tr><tr><td class="codekolom">1180</td><td class="codekolom">1226</td><td class="bredecode"> argsIndex = 0,</td></tr><tr><td class="codekolom">1181</td><td class="codekolom">1227</td><td class="bredecode"> argsLength = typeof guard == 'number' ? 2 : args.length;</td></tr><tr><td class="codekolom">1182</td><td class="codekolom">1228</td><td class="bredecode"> while (++argsIndex &lt; argsLength) {</td></tr><tr><td class="codekolom">1183</td><td class="codekolom">1229</td><td class="bredecode"> iterable = args[argsIndex];</td></tr><tr><td class="codekolom">1184</td><td class="codekolom">1230</td><td class="bredecode"> if (iterable &amp;&amp; objectTypes[typeof iterable]) { </td></tr><tr><td class="codekolom">1185</td><td class="codekolom">1231</td><td class="bredecode"> var ownIndex = -1,</td></tr><tr><td class="codekolom">1186</td><td class="codekolom">1232</td><td class="bredecode"> ownProps = objectTypes[typeof iterable] &amp;&amp; keys(iterable),</td></tr><tr><td class="codekolom">1187</td><td class="codekolom">1233</td><td class="bredecode"> length = ownProps ? ownProps.length : 0;</td></tr><tr><td class="codekolom">1188</td><td class="codekolom">1234</td><td class="bredecode"> </td></tr><tr><td class="codekolom">1189</td><td class="codekolom">1235</td><td class="bredecode"> while (++ownIndex &lt; length) {</td></tr><tr><td class="codekolom">1190</td><td class="codekolom">1236</td><td class="bredecode"> index = ownProps[ownIndex];</td></tr><tr><td class="codekolom">1191</td><td class="codekolom">1237</td><td class="bredecode"> if (typeof result[index] == 'undefined') result[index] = iterable[index]; </td></tr><tr><td class="codekolom">1192</td><td class="codekolom">1238</td><td class="bredecode"> } </td></tr><tr><td class="codekolom">1193</td><td class="codekolom">1239</td><td class="bredecode"> }</td></tr><tr><td class="codekolom">1194</td><td class="codekolom">1240</td><td class="bredecode"> }</td></tr><tr><td class="codekolom">1195</td><td class="codekolom">1241</td><td class="bredecode"> return result</td></tr><tr><td class="codekolom">1196</td><td class="codekolom">1242</td><td class="bredecode"> };</td></tr><tr><td class="codekolom">1197</td><td class="codekolom">1243</td><td class="bredecode"> </td></tr><tr><td class="codekolom">1198</td><td class="codekolom">1244</td><td class="bredecode"> /**</td></tr><tr><td class="codekolom">1199</td><td class="codekolom">1245</td><td class="bredecode"> * This method is similar to `_.find`, except that it returns the key of the</td></tr><tr><td class="codekolom">1200</td><td class="codekolom">1246</td><td class="bredecode"> * element that passes the callback check, instead of the element itself.</td></tr><tr><td class="codekolom">1201</td><td class="codekolom">1247</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">1202</td><td class="codekolom">1248</td><td class="bredecode"> * @static</td></tr><tr><td class="codekolom">1203</td><td class="codekolom">1249</td><td class="bredecode"> * @memberOf _</td></tr><tr><td class="codekolom">1204</td><td class="codekolom">1250</td><td class="bredecode"> * @category Objects</td></tr><tr><td class="codekolom">1205</td><td class="codekolom">1251</td><td class="bredecode"> * @param {Object} object The object to search.</td></tr><tr><td class="codekolom">1206</td><td class="codekolom">1252</td><td class="bredecode"> * @param {Function|Object|String} [callback=identity] The function called per</td></tr><tr><td class="codekolom">1207</td><td class="codekolom">1253</td><td class="bredecode"> * iteration. If a property name or object is passed, it will be used to create</td></tr><tr><td class="codekolom">1208</td><td class="codekolom">1254</td><td class="bredecode"> * a "_.pluck" or "_.where" style callback, respectively.</td></tr><tr><td class="codekolom">1209</td><td class="codekolom">1255</td><td class="bredecode"> * @param {Mixed} [thisArg] The `this` binding of `callback`.</td></tr><tr><td class="codekolom">1210</td><td class="codekolom">1256</td><td class="bredecode"> * @returns {Mixed} Returns the key of the found element, else `undefined`.</td></tr><tr><td class="codekolom">1211</td><td class="codekolom">1257</td><td class="bredecode"> * @example</td></tr><tr><td class="codekolom">1212</td><td class="codekolom">1258</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">1213</td><td class="codekolom">1259</td><td class="bredecode"> * _.findKey({ 'a': 1, 'b': 2, 'c': 3, 'd': 4 }, function(num) {</td></tr><tr><td class="codekolom">1214</td><td class="codekolom">1260</td><td class="bredecode"> * return num % 2 == 0;</td></tr><tr><td class="codekolom">1215</td><td class="codekolom">1261</td><td class="bredecode"> * });</td></tr><tr><td class="codekolom">1216</td><td class="codekolom">1262</td><td class="bredecode"> * // =&gt; 'b'</td></tr><tr><td class="codekolom">1217</td><td class="codekolom">1263</td><td class="bredecode"> */</td></tr><tr><td class="codekolom">1218</td><td class="codekolom">1264</td><td class="bredecode"> function findKey(object, callback, thisArg) {</td></tr><tr><td class="codekolom">1219</td><td class="codekolom">1265</td><td class="bredecode"> var result;</td></tr><tr><td class="codekolom">1220</td><td class="codekolom">1266</td><td class="bredecode"> callback = lodash.createCallback(callback, thisArg);</td></tr><tr><td class="codekolom">1221</td><td class="codekolom">1267</td><td class="bredecode"> forOwn(object, function(value, key, object) {</td></tr><tr><td class="codekolom">1222</td><td class="codekolom">1268</td><td class="bredecode"> if (callback(value, key, object)) {</td></tr><tr><td class="codekolom">1223</td><td class="codekolom">1269</td><td class="bredecode"> result = key;</td></tr><tr><td class="codekolom">1224</td><td class="codekolom">1270</td><td class="bredecode"> return false;</td></tr><tr><td class="codekolom">1225</td><td class="codekolom">1271</td><td class="bredecode"> }</td></tr><tr><td class="codekolom">1226</td><td class="codekolom">1272</td><td class="bredecode"> });</td></tr><tr><td class="codekolom">1227</td><td class="codekolom">1273</td><td class="bredecode"> return result;</td></tr><tr><td class="codekolom">1228</td><td class="codekolom">1274</td><td class="bredecode"> }</td></tr><tr><td class="codekolom">1229</td><td class="codekolom">1275</td><td class="bredecode"> </td></tr><tr><td class="codekolom">1230</td><td class="codekolom">1276</td><td class="bredecode"> /**</td></tr><tr><td class="codekolom">1231</td><td class="codekolom">1277</td><td class="bredecode"> * Iterates over `object`'s own and inherited enumerable properties, executing</td></tr><tr><td class="codekolom">1232</td><td class="codekolom">1278</td><td class="bredecode"> * the `callback` for each property. The `callback` is bound to `thisArg` and</td></tr><tr><td class="codekolom">1233</td><td class="codekolom">1279</td><td class="bredecode"> * invoked with three arguments; (value, key, object). Callbacks may exit iteration</td></tr><tr><td class="codekolom">1234</td><td class="codekolom">1280</td><td class="bredecode"> * early by explicitly returning `false`.</td></tr><tr><td class="codekolom">1235</td><td class="codekolom">1281</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">1236</td><td class="codekolom">1282</td><td class="bredecode"> * @static</td></tr><tr><td class="codekolom">1237</td><td class="codekolom">1283</td><td class="bredecode"> * @memberOf _</td></tr><tr><td class="codekolom">1238</td><td class="codekolom">1284</td><td class="bredecode"> * @type Function</td></tr><tr><td class="codekolom">1239</td><td class="codekolom">1285</td><td class="bredecode"> * @category Objects</td></tr><tr><td class="codekolom">1240</td><td class="codekolom">1286</td><td class="bredecode"> * @param {Object} object The object to iterate over.</td></tr><tr><td class="codekolom">1241</td><td class="codekolom">1287</td><td class="bredecode"> * @param {Function} [callback=identity] The function called per iteration.</td></tr><tr><td class="codekolom">1242</td><td class="codekolom">1288</td><td class="bredecode"> * @param {Mixed} [thisArg] The `this` binding of `callback`.</td></tr><tr><td class="codekolom">1243</td><td class="codekolom">1289</td><td class="bredecode"> * @returns {Object} Returns `object`.</td></tr><tr><td class="codekolom">1244</td><td class="codekolom">1290</td><td class="bredecode"> * @example</td></tr><tr><td class="codekolom">1245</td><td class="codekolom">1291</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">1246</td><td class="codekolom">1292</td><td class="bredecode"> * function Dog(name) {</td></tr><tr><td class="codekolom">1247</td><td class="codekolom">1293</td><td class="bredecode"> * this.name = name;</td></tr><tr><td class="codekolom">1248</td><td class="codekolom">1294</td><td class="bredecode"> * }</td></tr><tr><td class="codekolom">1249</td><td class="codekolom">1295</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">1250</td><td class="codekolom">1296</td><td class="bredecode"> * Dog.prototype.bark = function() {</td></tr><tr><td class="codekolom">1251</td><td class="codekolom">1297</td><td class="bredecode"> * alert('Woof, woof!');</td></tr><tr><td class="codekolom">1252</td><td class="codekolom">1298</td><td class="bredecode"> * };</td></tr><tr><td class="codekolom">1253</td><td class="codekolom">1299</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">1254</td><td class="codekolom">1300</td><td class="bredecode"> * _.forIn(new Dog('Dagny'), function(value, key) {</td></tr><tr><td class="codekolom">1255</td><td class="codekolom">1301</td><td class="bredecode"> * alert(key);</td></tr><tr><td class="codekolom">1256</td><td class="codekolom">1302</td><td class="bredecode"> * });</td></tr><tr><td class="codekolom">1257</td><td class="codekolom">1303</td><td class="bredecode"> * // =&gt; alerts 'name' and 'bark' (order is not guaranteed)</td></tr><tr><td class="codekolom">1258</td><td class="codekolom">1304</td><td class="bredecode"> */</td></tr><tr><td class="codekolom">1259</td><td class="codekolom">1305</td><td class="bredecode"> var forIn = function (collection, callback, thisArg) {</td></tr><tr><td class="codekolom">1260</td><td class="codekolom">1306</td><td class="bredecode"> var index, iterable = collection, result = iterable;</td></tr><tr><td class="codekolom">1261</td><td class="codekolom">1307</td><td class="bredecode"> if (!iterable) return result;</td></tr><tr><td class="codekolom">1262</td><td class="codekolom">1308</td><td class="bredecode"> if (!objectTypes[typeof iterable]) return result;</td></tr><tr><td class="codekolom">1263</td><td class="codekolom">1309</td><td class="bredecode"> callback = callback &amp;&amp; typeof thisArg == 'undefined' ? callback : lodash.createCallback(callback, thisArg); </td></tr><tr><td class="codekolom">1264</td><td class="codekolom">1310</td><td class="bredecode"> for (index in iterable) {</td></tr><tr><td class="codekolom">1265</td><td class="codekolom">1311</td><td class="bredecode"> if (callback(iterable[index], index, collection) === false) return result; </td></tr><tr><td class="codekolom">1266</td><td class="codekolom">1312</td><td class="bredecode"> } </td></tr><tr><td class="codekolom">1267</td><td class="codekolom">1313</td><td class="bredecode"> return result</td></tr><tr><td class="codekolom">1268</td><td class="codekolom">1314</td><td class="bredecode"> };</td></tr><tr><td class="codekolom">1269</td><td class="codekolom">1315</td><td class="bredecode"> </td></tr><tr><td class="codekolom">1270</td><td class="codekolom">1316</td><td class="bredecode"> /**</td></tr><tr><td class="codekolom">1271</td><td class="codekolom">1317</td><td class="bredecode"> * Iterates over an object's own enumerable properties, executing the `callback`</td></tr><tr><td class="codekolom">1272</td><td class="codekolom">1318</td><td class="bredecode"> * for each property. The `callback` is bound to `thisArg` and invoked with three</td></tr><tr><td class="codekolom">1273</td><td class="codekolom">1319</td><td class="bredecode"> * arguments; (value, key, object). Callbacks may exit iteration early by explicitly</td></tr><tr><td class="codekolom">1274</td><td class="codekolom">1320</td><td class="bredecode"> * returning `false`.</td></tr><tr><td class="codekolom">1275</td><td class="codekolom">1321</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">1276</td><td class="codekolom">1322</td><td class="bredecode"> * @static</td></tr><tr><td class="codekolom">1277</td><td class="codekolom">1323</td><td class="bredecode"> * @memberOf _</td></tr><tr><td class="codekolom">1278</td><td class="codekolom">1324</td><td class="bredecode"> * @type Function</td></tr><tr><td class="codekolom">1279</td><td class="codekolom">1325</td><td class="bredecode"> * @category Objects</td></tr><tr><td class="codekolom">1280</td><td class="codekolom">1326</td><td class="bredecode"> * @param {Object} object The object to iterate over.</td></tr><tr><td class="codekolom">1281</td><td class="codekolom">1327</td><td class="bredecode"> * @param {Function} [callback=identity] The function called per iteration.</td></tr><tr><td class="codekolom">1282</td><td class="codekolom">1328</td><td class="bredecode"> * @param {Mixed} [thisArg] The `this` binding of `callback`.</td></tr><tr><td class="codekolom">1283</td><td class="codekolom">1329</td><td class="bredecode"> * @returns {Object} Returns `object`.</td></tr><tr><td class="codekolom">1284</td><td class="codekolom">1330</td><td class="bredecode"> * @example</td></tr><tr><td class="codekolom">1285</td><td class="codekolom">1331</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">1286</td><td class="codekolom">1332</td><td class="bredecode"> * _.forOwn({ '0': 'zero', '1': 'one', 'length': 2 }, function(num, key) {</td></tr><tr><td class="codekolom">1287</td><td class="codekolom">1333</td><td class="bredecode"> * alert(key);</td></tr><tr><td class="codekolom">1288</td><td class="codekolom">1334</td><td class="bredecode"> * });</td></tr><tr><td class="codekolom">1289</td><td class="codekolom">1335</td><td class="bredecode"> * // =&gt; alerts '0', '1', and 'length' (order is not guaranteed)</td></tr><tr><td class="codekolom">1290</td><td class="codekolom">1336</td><td class="bredecode"> */</td></tr><tr><td class="codekolom">1291</td><td class="codekolom">1337</td><td class="bredecode"> var forOwn = function (collection, callback, thisArg) {</td></tr><tr><td class="codekolom">1292</td><td class="codekolom">1338</td><td class="bredecode"> var index, iterable = collection, result = iterable;</td></tr><tr><td class="codekolom">1293</td><td class="codekolom">1339</td><td class="bredecode"> if (!iterable) return result;</td></tr><tr><td class="codekolom">1294</td><td class="codekolom">1340</td><td class="bredecode"> if (!objectTypes[typeof iterable]) return result;</td></tr><tr><td class="codekolom">1295</td><td class="codekolom">1341</td><td class="bredecode"> callback = callback &amp;&amp; typeof thisArg == 'undefined' ? callback : lodash.createCallback(callback, thisArg); </td></tr><tr><td class="codekolom">1296</td><td class="codekolom">1342</td><td class="bredecode"> var ownIndex = -1,</td></tr><tr><td class="codekolom">1297</td><td class="codekolom">1343</td><td class="bredecode"> ownProps = objectTypes[typeof iterable] &amp;&amp; keys(iterable),</td></tr><tr><td class="codekolom">1298</td><td class="codekolom">1344</td><td class="bredecode"> length = ownProps ? ownProps.length : 0;</td></tr><tr><td class="codekolom">1299</td><td class="codekolom">1345</td><td class="bredecode"> </td></tr><tr><td class="codekolom">1300</td><td class="codekolom">1346</td><td class="bredecode"> while (++ownIndex &lt; length) {</td></tr><tr><td class="codekolom">1301</td><td class="codekolom">1347</td><td class="bredecode"> index = ownProps[ownIndex];</td></tr><tr><td class="codekolom">1302</td><td class="codekolom">1348</td><td class="bredecode"> if (callback(iterable[index], index, collection) === false) return result; </td></tr><tr><td class="codekolom">1303</td><td class="codekolom">1349</td><td class="bredecode"> } </td></tr><tr><td class="codekolom">1304</td><td class="codekolom">1350</td><td class="bredecode"> return result</td></tr><tr><td class="codekolom">1305</td><td class="codekolom">1351</td><td class="bredecode"> };</td></tr><tr><td class="codekolom">1306</td><td class="codekolom">1352</td><td class="bredecode"> </td></tr><tr><td class="codekolom">1307</td><td class="codekolom">1353</td><td class="bredecode"> /**</td></tr><tr><td class="codekolom">1308</td><td class="codekolom">1354</td><td class="bredecode"> * Creates a sorted array of all enumerable properties, own and inherited,</td></tr><tr><td class="codekolom">1309</td><td class="codekolom">1355</td><td class="bredecode"> * of `object` that have function values.</td></tr><tr><td class="codekolom">1310</td><td class="codekolom">1356</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">1311</td><td class="codekolom">1357</td><td class="bredecode"> * @static</td></tr><tr><td class="codekolom">1312</td><td class="codekolom">1358</td><td class="bredecode"> * @memberOf _</td></tr><tr><td class="codekolom">1313</td><td class="codekolom">1359</td><td class="bredecode"> * @alias methods</td></tr><tr><td class="codekolom">1314</td><td class="codekolom">1360</td><td class="bredecode"> * @category Objects</td></tr><tr><td class="codekolom">1315</td><td class="codekolom">1361</td><td class="bredecode"> * @param {Object} object The object to inspect.</td></tr><tr><td class="codekolom">1316</td><td class="codekolom">1362</td><td class="bredecode"> * @returns {Array} Returns a new array of property names that have function values.</td></tr><tr><td class="codekolom">1317</td><td class="codekolom">1363</td><td class="bredecode"> * @example</td></tr><tr><td class="codekolom">1318</td><td class="codekolom">1364</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">1319</td><td class="codekolom">1365</td><td class="bredecode"> * _.functions(_);</td></tr><tr><td class="codekolom">1320</td><td class="codekolom">1366</td><td class="bredecode"> * // =&gt; ['all', 'any', 'bind', 'bindAll', 'clone', 'compact', 'compose', ...]</td></tr><tr><td class="codekolom">1321</td><td class="codekolom">1367</td><td class="bredecode"> */</td></tr><tr><td class="codekolom">1322</td><td class="codekolom">1368</td><td class="bredecode"> function functions(object) {</td></tr><tr><td class="codekolom">1323</td><td class="codekolom">1369</td><td class="bredecode"> var result = [];</td></tr><tr><td class="codekolom">1324</td><td class="codekolom">1370</td><td class="bredecode"> forIn(object, function(value, key) {</td></tr><tr><td class="codekolom">1325</td><td class="codekolom">1371</td><td class="bredecode"> if (isFunction(value)) {</td></tr><tr><td class="codekolom">1326</td><td class="codekolom">1372</td><td class="bredecode"> result.push(key);</td></tr><tr><td class="codekolom">1327</td><td class="codekolom">1373</td><td class="bredecode"> }</td></tr><tr><td class="codekolom">1328</td><td class="codekolom">1374</td><td class="bredecode"> });</td></tr><tr><td class="codekolom">1329</td><td class="codekolom">1375</td><td class="bredecode"> return result.sort();</td></tr><tr><td class="codekolom">1330</td><td class="codekolom">1376</td><td class="bredecode"> }</td></tr><tr><td class="codekolom">1331</td><td class="codekolom">1377</td><td class="bredecode"> </td></tr><tr><td class="codekolom">1332</td><td class="codekolom">1378</td><td class="bredecode"> /**</td></tr><tr><td class="codekolom">1333</td><td class="codekolom">1379</td><td class="bredecode"> * Checks if the specified object `property` exists and is a direct property,</td></tr><tr><td class="codekolom">1334</td><td class="codekolom">1380</td><td class="bredecode"> * instead of an inherited property.</td></tr><tr><td class="codekolom">1335</td><td class="codekolom">1381</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">1336</td><td class="codekolom">1382</td><td class="bredecode"> * @static</td></tr><tr><td class="codekolom">1337</td><td class="codekolom">1383</td><td class="bredecode"> * @memberOf _</td></tr><tr><td class="codekolom">1338</td><td class="codekolom">1384</td><td class="bredecode"> * @category Objects</td></tr><tr><td class="codekolom">1339</td><td class="codekolom">1385</td><td class="bredecode"> * @param {Object} object The object to check.</td></tr><tr><td class="codekolom">1340</td><td class="codekolom">1386</td><td class="bredecode"> * @param {String} property The property to check for.</td></tr><tr><td class="codekolom">1341</td><td class="codekolom">1387</td><td class="bredecode"> * @returns {Boolean} Returns `true` if key is a direct property, else `false`.</td></tr><tr><td class="codekolom">1342</td><td class="codekolom">1388</td><td class="bredecode"> * @example</td></tr><tr><td class="codekolom">1343</td><td class="codekolom">1389</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">1344</td><td class="codekolom">1390</td><td class="bredecode"> * _.has({ 'a': 1, 'b': 2, 'c': 3 }, 'b');</td></tr><tr><td class="codekolom">1345</td><td class="codekolom">1391</td><td class="bredecode"> * // =&gt; true</td></tr><tr><td class="codekolom">1346</td><td class="codekolom">1392</td><td class="bredecode"> */</td></tr><tr><td class="codekolom">1347</td><td class="codekolom">1393</td><td class="bredecode"> function has(object, property) {</td></tr><tr><td class="codekolom">1348</td><td class="codekolom">1394</td><td class="bredecode"> return object ? hasOwnProperty.call(object, property) : false;</td></tr><tr><td class="codekolom">1349</td><td class="codekolom">1395</td><td class="bredecode"> }</td></tr><tr><td class="codekolom">1350</td><td class="codekolom">1396</td><td class="bredecode"> </td></tr><tr><td class="codekolom">1351</td><td class="codekolom">1397</td><td class="bredecode"> /**</td></tr><tr><td class="codekolom">1352</td><td class="codekolom">1398</td><td class="bredecode"> * Creates an object composed of the inverted keys and values of the given `object`.</td></tr><tr><td class="codekolom">1353</td><td class="codekolom">1399</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">1354</td><td class="codekolom">1400</td><td class="bredecode"> * @static</td></tr><tr><td class="codekolom">1355</td><td class="codekolom">1401</td><td class="bredecode"> * @memberOf _</td></tr><tr><td class="codekolom">1356</td><td class="codekolom">1402</td><td class="bredecode"> * @category Objects</td></tr><tr><td class="codekolom">1357</td><td class="codekolom">1403</td><td class="bredecode"> * @param {Object} object The object to invert.</td></tr><tr><td class="codekolom">1358</td><td class="codekolom">1404</td><td class="bredecode"> * @returns {Object} Returns the created inverted object.</td></tr><tr><td class="codekolom">1359</td><td class="codekolom">1405</td><td class="bredecode"> * @example</td></tr><tr><td class="codekolom">1360</td><td class="codekolom">1406</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">1361</td><td class="codekolom">1407</td><td class="bredecode"> * _.invert({ 'first': 'moe', 'second': 'larry' });</td></tr><tr><td class="codekolom">1362</td><td class="codekolom">1408</td><td class="bredecode"> * // =&gt; { 'moe': 'first', 'larry': 'second' }</td></tr><tr><td class="codekolom">1363</td><td class="codekolom">1409</td><td class="bredecode"> */</td></tr><tr><td class="codekolom">1364</td><td class="codekolom">1410</td><td class="bredecode"> function invert(object) {</td></tr><tr><td class="codekolom">1365</td><td class="codekolom">1411</td><td class="bredecode"> var index = -1,</td></tr><tr><td class="codekolom">1366</td><td class="codekolom">1412</td><td class="bredecode"> props = keys(object),</td></tr><tr><td class="codekolom">1367</td><td class="codekolom">1413</td><td class="bredecode"> length = props.length,</td></tr><tr><td class="codekolom">1368</td><td class="codekolom">1414</td><td class="bredecode"> result = {};</td></tr><tr><td class="codekolom">1369</td><td class="codekolom">1415</td><td class="bredecode"> </td></tr><tr><td class="codekolom">1370</td><td class="codekolom">1416</td><td class="bredecode"> while (++index &lt; length) {</td></tr><tr><td class="codekolom">1371</td><td class="codekolom">1417</td><td class="bredecode"> var key = props[index];</td></tr><tr><td class="codekolom">1372</td><td class="codekolom">1418</td><td class="bredecode"> result[object[key]] = key;</td></tr><tr><td class="codekolom">1373</td><td class="codekolom">1419</td><td class="bredecode"> }</td></tr><tr><td class="codekolom">1374</td><td class="codekolom">1420</td><td class="bredecode"> return result;</td></tr><tr><td class="codekolom">1375</td><td class="codekolom">1421</td><td class="bredecode"> }</td></tr><tr><td class="codekolom">1376</td><td class="codekolom">1422</td><td class="bredecode"> </td></tr><tr><td class="codekolom">1377</td><td class="codekolom">1423</td><td class="bredecode"> /**</td></tr><tr><td class="codekolom">1378</td><td class="codekolom">1424</td><td class="bredecode"> * Checks if `value` is a boolean value.</td></tr><tr><td class="codekolom">1379</td><td class="codekolom">1425</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">1380</td><td class="codekolom">1426</td><td class="bredecode"> * @static</td></tr><tr><td class="codekolom">1381</td><td class="codekolom">1427</td><td class="bredecode"> * @memberOf _</td></tr><tr><td class="codekolom">1382</td><td class="codekolom">1428</td><td class="bredecode"> * @category Objects</td></tr><tr><td class="codekolom">1383</td><td class="codekolom">1429</td><td class="bredecode"> * @param {Mixed} value The value to check.</td></tr><tr><td class="codekolom">1384</td><td class="codekolom">1430</td><td class="bredecode"> * @returns {Boolean} Returns `true`, if the `value` is a boolean value, else `false`.</td></tr><tr><td class="codekolom">1385</td><td class="codekolom">1431</td><td class="bredecode"> * @example</td></tr><tr><td class="codekolom">1386</td><td class="codekolom">1432</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">1387</td><td class="codekolom">1433</td><td class="bredecode"> * _.isBoolean(null);</td></tr><tr><td class="codekolom">1388</td><td class="codekolom">1434</td><td class="bredecode"> * // =&gt; false</td></tr><tr><td class="codekolom">1389</td><td class="codekolom">1435</td><td class="bredecode"> */</td></tr><tr><td class="codekolom">1390</td><td class="codekolom">1436</td><td class="bredecode"> function isBoolean(value) {</td></tr><tr><td class="codekolom">1391</td><td class="codekolom">1437</td><td class="bredecode"> return value === true || value === false || toString.call(value) == boolClass;</td></tr><tr><td class="codekolom">1392</td><td class="codekolom">1438</td><td class="bredecode"> }</td></tr><tr><td class="codekolom">1393</td><td class="codekolom">1439</td><td class="bredecode"> </td></tr><tr><td class="codekolom">1394</td><td class="codekolom">1440</td><td class="bredecode"> /**</td></tr><tr><td class="codekolom">1395</td><td class="codekolom">1441</td><td class="bredecode"> * Checks if `value` is a date.</td></tr><tr><td class="codekolom">1396</td><td class="codekolom">1442</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">1397</td><td class="codekolom">1443</td><td class="bredecode"> * @static</td></tr><tr><td class="codekolom">1398</td><td class="codekolom">1444</td><td class="bredecode"> * @memberOf _</td></tr><tr><td class="codekolom">1399</td><td class="codekolom">1445</td><td class="bredecode"> * @category Objects</td></tr><tr><td class="codekolom">1400</td><td class="codekolom">1446</td><td class="bredecode"> * @param {Mixed} value The value to check.</td></tr><tr><td class="codekolom">1401</td><td class="codekolom">1447</td><td class="bredecode"> * @returns {Boolean} Returns `true`, if the `value` is a date, else `false`.</td></tr><tr><td class="codekolom">1402</td><td class="codekolom">1448</td><td class="bredecode"> * @example</td></tr><tr><td class="codekolom">1403</td><td class="codekolom">1449</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">1404</td><td class="codekolom">1450</td><td class="bredecode"> * _.isDate(new Date);</td></tr><tr><td class="codekolom">1405</td><td class="codekolom">1451</td><td class="bredecode"> * // =&gt; true</td></tr><tr><td class="codekolom">1406</td><td class="codekolom">1452</td><td class="bredecode"> */</td></tr><tr><td class="codekolom">1407</td><td class="codekolom">1453</td><td class="bredecode"> function isDate(value) {</td></tr><tr><td class="codekolom">1408</td><td class="codekolom">1454</td><td class="bredecode"> return value ? (typeof value == 'object' &amp;&amp; toString.call(value) == dateClass) : false;</td></tr><tr><td class="codekolom">1409</td><td class="codekolom">1455</td><td class="bredecode"> }</td></tr><tr><td class="codekolom">1410</td><td class="codekolom">1456</td><td class="bredecode"> </td></tr><tr><td class="codekolom">1411</td><td class="codekolom">1457</td><td class="bredecode"> /**</td></tr><tr><td class="codekolom">1412</td><td class="codekolom">1458</td><td class="bredecode"> * Checks if `value` is a DOM element.</td></tr><tr><td class="codekolom">1413</td><td class="codekolom">1459</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">1414</td><td class="codekolom">1460</td><td class="bredecode"> * @static</td></tr><tr><td class="codekolom">1415</td><td class="codekolom">1461</td><td class="bredecode"> * @memberOf _</td></tr><tr><td class="codekolom">1416</td><td class="codekolom">1462</td><td class="bredecode"> * @category Objects</td></tr><tr><td class="codekolom">1417</td><td class="codekolom">1463</td><td class="bredecode"> * @param {Mixed} value The value to check.</td></tr><tr><td class="codekolom">1418</td><td class="codekolom">1464</td><td class="bredecode"> * @returns {Boolean} Returns `true`, if the `value` is a DOM element, else `false`.</td></tr><tr><td class="codekolom">1419</td><td class="codekolom">1465</td><td class="bredecode"> * @example</td></tr><tr><td class="codekolom">1420</td><td class="codekolom">1466</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">1421</td><td class="codekolom">1467</td><td class="bredecode"> * _.isElement(document.body);</td></tr><tr><td class="codekolom">1422</td><td class="codekolom">1468</td><td class="bredecode"> * // =&gt; true</td></tr><tr><td class="codekolom">1423</td><td class="codekolom">1469</td><td class="bredecode"> */</td></tr><tr><td class="codekolom">1424</td><td class="codekolom">1470</td><td class="bredecode"> function isElement(value) {</td></tr><tr><td class="codekolom">1425</td><td class="codekolom">1471</td><td class="bredecode"> return value ? value.nodeType === 1 : false;</td></tr><tr><td class="codekolom">1426</td><td class="codekolom">1472</td><td class="bredecode"> }</td></tr><tr><td class="codekolom">1427</td><td class="codekolom">1473</td><td class="bredecode"> </td></tr><tr><td class="codekolom">1428</td><td class="codekolom">1474</td><td class="bredecode"> /**</td></tr><tr><td class="codekolom">1429</td><td class="codekolom">1475</td><td class="bredecode"> * Checks if `value` is empty. Arrays, strings, or `arguments` objects with a</td></tr><tr><td class="codekolom">1430</td><td class="codekolom">1476</td><td class="bredecode"> * length of `0` and objects with no own enumerable properties are considered</td></tr><tr><td class="codekolom">1431</td><td class="codekolom">1477</td><td class="bredecode"> * "empty".</td></tr><tr><td class="codekolom">1432</td><td class="codekolom">1478</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">1433</td><td class="codekolom">1479</td><td class="bredecode"> * @static</td></tr><tr><td class="codekolom">1434</td><td class="codekolom">1480</td><td class="bredecode"> * @memberOf _</td></tr><tr><td class="codekolom">1435</td><td class="codekolom">1481</td><td class="bredecode"> * @category Objects</td></tr><tr><td class="codekolom">1436</td><td class="codekolom">1482</td><td class="bredecode"> * @param {Array|Object|String} value The value to inspect.</td></tr><tr><td class="codekolom">1437</td><td class="codekolom">1483</td><td class="bredecode"> * @returns {Boolean} Returns `true`, if the `value` is empty, else `false`.</td></tr><tr><td class="codekolom">1438</td><td class="codekolom">1484</td><td class="bredecode"> * @example</td></tr><tr><td class="codekolom">1439</td><td class="codekolom">1485</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">1440</td><td class="codekolom">1486</td><td class="bredecode"> * _.isEmpty([1, 2, 3]);</td></tr><tr><td class="codekolom">1441</td><td class="codekolom">1487</td><td class="bredecode"> * // =&gt; false</td></tr><tr><td class="codekolom">1442</td><td class="codekolom">1488</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">1443</td><td class="codekolom">1489</td><td class="bredecode"> * _.isEmpty({});</td></tr><tr><td class="codekolom">1444</td><td class="codekolom">1490</td><td class="bredecode"> * // =&gt; true</td></tr><tr><td class="codekolom">1445</td><td class="codekolom">1491</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">1446</td><td class="codekolom">1492</td><td class="bredecode"> * _.isEmpty('');</td></tr><tr><td class="codekolom">1447</td><td class="codekolom">1493</td><td class="bredecode"> * // =&gt; true</td></tr><tr><td class="codekolom">1448</td><td class="codekolom">1494</td><td class="bredecode"> */</td></tr><tr><td class="codekolom">1449</td><td class="codekolom">1495</td><td class="bredecode"> function isEmpty(value) {</td></tr><tr><td class="codekolom">1450</td><td class="codekolom">1496</td><td class="bredecode"> var result = true;</td></tr><tr><td class="codekolom">1451</td><td class="codekolom">1497</td><td class="bredecode"> if (!value) {</td></tr><tr><td class="codekolom">1452</td><td class="codekolom">1498</td><td class="bredecode"> return result;</td></tr><tr><td class="codekolom">1453</td><td class="codekolom">1499</td><td class="bredecode"> }</td></tr><tr><td class="codekolom">1454</td><td class="codekolom">1500</td><td class="bredecode"> var className = toString.call(value),</td></tr><tr><td class="codekolom">1455</td><td class="codekolom">1501</td><td class="bredecode"> length = value.length;</td></tr><tr><td class="codekolom">1456</td><td class="codekolom">1502</td><td class="bredecode"> </td></tr><tr><td class="codekolom">1457</td><td class="codekolom">1503</td><td class="bredecode"> if ((className == arrayClass || className == stringClass || className == argsClass ) ||</td></tr><tr><td class="codekolom">1458</td><td class="codekolom">1504</td><td class="bredecode"> (className == objectClass &amp;&amp; typeof length == 'number' &amp;&amp; isFunction(value.splice))) {</td></tr><tr><td class="codekolom">1459</td><td class="codekolom">1505</td><td class="bredecode"> return !length;</td></tr><tr><td class="codekolom">1460</td><td class="codekolom">1506</td><td class="bredecode"> }</td></tr><tr><td class="codekolom">1461</td><td class="codekolom">1507</td><td class="bredecode"> forOwn(value, function() {</td></tr><tr><td class="codekolom">1462</td><td class="codekolom">1508</td><td class="bredecode"> return (result = false);</td></tr><tr><td class="codekolom">1463</td><td class="codekolom">1509</td><td class="bredecode"> });</td></tr><tr><td class="codekolom">1464</td><td class="codekolom">1510</td><td class="bredecode"> return result;</td></tr><tr><td class="codekolom">1465</td><td class="codekolom">1511</td><td class="bredecode"> }</td></tr><tr><td class="codekolom">1466</td><td class="codekolom">1512</td><td class="bredecode"> </td></tr><tr><td class="codekolom">1467</td><td class="codekolom">1513</td><td class="bredecode"> /**</td></tr><tr><td class="codekolom">1468</td><td class="codekolom">1514</td><td class="bredecode"> * Performs a deep comparison between two values to determine if they are</td></tr><tr><td class="codekolom">1469</td><td class="codekolom">1515</td><td class="bredecode"> * equivalent to each other. If `callback` is passed, it will be executed to</td></tr><tr><td class="codekolom">1470</td><td class="codekolom">1516</td><td class="bredecode"> * compare values. If `callback` returns `undefined`, comparisons will be handled</td></tr><tr><td class="codekolom">1471</td><td class="codekolom">1517</td><td class="bredecode"> * by the method instead. The `callback` is bound to `thisArg` and invoked with</td></tr><tr><td class="codekolom">1472</td><td class="codekolom">1518</td><td class="bredecode"> * two arguments; (a, b).</td></tr><tr><td class="codekolom">1473</td><td class="codekolom">1519</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">1474</td><td class="codekolom">1520</td><td class="bredecode"> * @static</td></tr><tr><td class="codekolom">1475</td><td class="codekolom">1521</td><td class="bredecode"> * @memberOf _</td></tr><tr><td class="codekolom">1476</td><td class="codekolom">1522</td><td class="bredecode"> * @category Objects</td></tr><tr><td class="codekolom">1477</td><td class="codekolom">1523</td><td class="bredecode"> * @param {Mixed} a The value to compare.</td></tr><tr><td class="codekolom">1478</td><td class="codekolom">1524</td><td class="bredecode"> * @param {Mixed} b The other value to compare.</td></tr><tr><td class="codekolom">1479</td><td class="codekolom">1525</td><td class="bredecode"> * @param {Function} [callback] The function to customize comparing values.</td></tr><tr><td class="codekolom">1480</td><td class="codekolom">1526</td><td class="bredecode"> * @param {Mixed} [thisArg] The `this` binding of `callback`.</td></tr><tr><td class="codekolom">1481</td><td class="codekolom">1527</td><td class="bredecode"> * @param- {Array} [stackA=[]] Tracks traversed `a` objects.</td></tr><tr><td class="codekolom">1482</td><td class="codekolom">1528</td><td class="bredecode"> * @param- {Array} [stackB=[]] Tracks traversed `b` objects.</td></tr><tr><td class="codekolom">1483</td><td class="codekolom">1529</td><td class="bredecode"> * @returns {Boolean} Returns `true`, if the values are equivalent, else `false`.</td></tr><tr><td class="codekolom">1484</td><td class="codekolom">1530</td><td class="bredecode"> * @example</td></tr><tr><td class="codekolom">1485</td><td class="codekolom">1531</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">1486</td><td class="codekolom">1532</td><td class="bredecode"> * var moe = { 'name': 'moe', 'age': 40 };</td></tr><tr><td class="codekolom">1487</td><td class="codekolom">1533</td><td class="bredecode"> * var copy = { 'name': 'moe', 'age': 40 };</td></tr><tr><td class="codekolom">1488</td><td class="codekolom">1534</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">1489</td><td class="codekolom">1535</td><td class="bredecode"> * moe == copy;</td></tr><tr><td class="codekolom">1490</td><td class="codekolom">1536</td><td class="bredecode"> * // =&gt; false</td></tr><tr><td class="codekolom">1491</td><td class="codekolom">1537</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">1492</td><td class="codekolom">1538</td><td class="bredecode"> * _.isEqual(moe, copy);</td></tr><tr><td class="codekolom">1493</td><td class="codekolom">1539</td><td class="bredecode"> * // =&gt; true</td></tr><tr><td class="codekolom">1494</td><td class="codekolom">1540</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">1495</td><td class="codekolom">1541</td><td class="bredecode"> * var words = ['hello', 'goodbye'];</td></tr><tr><td class="codekolom">1496</td><td class="codekolom">1542</td><td class="bredecode"> * var otherWords = ['hi', 'goodbye'];</td></tr><tr><td class="codekolom">1497</td><td class="codekolom">1543</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">1498</td><td class="codekolom">1544</td><td class="bredecode"> * _.isEqual(words, otherWords, function(a, b) {</td></tr><tr><td class="codekolom">1499</td><td class="codekolom">1545</td><td class="bredecode"> * var reGreet = /^(?:hello|hi)$/i,</td></tr><tr><td class="codekolom">1500</td><td class="codekolom">1546</td><td class="bredecode"> * aGreet = _.isString(a) &amp;&amp; reGreet.test(a),</td></tr><tr><td class="codekolom">1501</td><td class="codekolom">1547</td><td class="bredecode"> * bGreet = _.isString(b) &amp;&amp; reGreet.test(b);</td></tr><tr><td class="codekolom">1502</td><td class="codekolom">1548</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">1503</td><td class="codekolom">1549</td><td class="bredecode"> * return (aGreet || bGreet) ? (aGreet == bGreet) : undefined;</td></tr><tr><td class="codekolom">1504</td><td class="codekolom">1550</td><td class="bredecode"> * });</td></tr><tr><td class="codekolom">1505</td><td class="codekolom">1551</td><td class="bredecode"> * // =&gt; true</td></tr><tr><td class="codekolom">1506</td><td class="codekolom">1552</td><td class="bredecode"> */</td></tr><tr class="del"><td class="codekolom">1507</td><td class="codekolom"></td><td class="bredecode">- function isEqual(a, b, callback, thisArg, stackA, stackB) {</td></tr><tr class="add"><td class="codekolom"></td><td class="codekolom">1553</td><td class="bredecode">+ var isEqual = function(a, b, callback, thisArg, stackA, stackB) {</td></tr><tr><td class="codekolom">1508</td><td class="codekolom">1554</td><td class="bredecode"> // used to indicate that when comparing objects, `a` has at least the properties of `b`</td></tr><tr><td class="codekolom">1509</td><td class="codekolom">1555</td><td class="bredecode"> var whereIndicator = callback === indicatorObject;</td></tr><tr><td class="codekolom">1510</td><td class="codekolom">1556</td><td class="bredecode"> if (typeof callback == 'function' &amp;&amp; !whereIndicator) {</td></tr><tr><td class="codekolom">1511</td><td class="codekolom">1557</td><td class="bredecode"> callback = lodash.createCallback(callback, thisArg, 2);</td></tr><tr><td class="codekolom">1512</td><td class="codekolom">1558</td><td class="bredecode"> var result = callback(a, b);</td></tr><tr><td class="codekolom">1513</td><td class="codekolom">1559</td><td class="bredecode"> if (typeof result != 'undefined') {</td></tr><tr><td class="codekolom">1514</td><td class="codekolom">1560</td><td class="bredecode"> return !!result;</td></tr><tr><td class="codekolom">1515</td><td class="codekolom">1561</td><td class="bredecode"> }</td></tr><tr><td class="codekolom">1516</td><td class="codekolom">1562</td><td class="bredecode"> }</td></tr><tr><td class="codekolom">1517</td><td class="codekolom">1563</td><td class="bredecode"> // exit early for identical values</td></tr><tr><td class="codekolom">1518</td><td class="codekolom">1564</td><td class="bredecode"> if (a === b) {</td></tr><tr><td class="codekolom">1519</td><td class="codekolom">1565</td><td class="bredecode"> // treat `+0` vs. `-0` as not equal</td></tr><tr><td class="codekolom">1520</td><td class="codekolom">1566</td><td class="bredecode"> return a !== 0 || (1 / a == 1 / b);</td></tr><tr><td class="codekolom">1521</td><td class="codekolom">1567</td><td class="bredecode"> }</td></tr><tr><td class="codekolom">1522</td><td class="codekolom">1568</td><td class="bredecode"> var type = typeof a,</td></tr><tr><td class="codekolom">1523</td><td class="codekolom">1569</td><td class="bredecode"> otherType = typeof b;</td></tr><tr><td class="codekolom">1524</td><td class="codekolom">1570</td><td class="bredecode"> </td></tr><tr><td class="codekolom">1525</td><td class="codekolom">1571</td><td class="bredecode"> // exit early for unlike primitive values</td></tr><tr><td class="codekolom">1526</td><td class="codekolom">1572</td><td class="bredecode"> if (a === a &amp;&amp;</td></tr><tr><td class="codekolom">1527</td><td class="codekolom">1573</td><td class="bredecode"> (!a || (type != 'function' &amp;&amp; type != 'object')) &amp;&amp;</td></tr><tr><td class="codekolom">1528</td><td class="codekolom">1574</td><td class="bredecode"> (!b || (otherType != 'function' &amp;&amp; otherType != 'object'))) {</td></tr><tr><td class="codekolom">1529</td><td class="codekolom">1575</td><td class="bredecode"> return false;</td></tr><tr><td class="codekolom">1530</td><td class="codekolom">1576</td><td class="bredecode"> }</td></tr><tr><td class="codekolom">1531</td><td class="codekolom">1577</td><td class="bredecode"> // exit early for `null` and `undefined`, avoiding ES3's Function#call behavior</td></tr><tr><td class="codekolom">1532</td><td class="codekolom">1578</td><td class="bredecode"> // http://es5.github.com/#x15.3.4.4</td></tr><tr><td class="codekolom">1533</td><td class="codekolom">1579</td><td class="bredecode"> if (a == null || b == null) {</td></tr><tr><td class="codekolom">1534</td><td class="codekolom">1580</td><td class="bredecode"> return a === b;</td></tr><tr><td class="codekolom">1535</td><td class="codekolom">1581</td><td class="bredecode"> }</td></tr><tr><td class="codekolom">1536</td><td class="codekolom">1582</td><td class="bredecode"> // compare [[Class]] names</td></tr><tr><td class="codekolom">1537</td><td class="codekolom">1583</td><td class="bredecode"> var className = toString.call(a),</td></tr><tr><td class="codekolom">1538</td><td class="codekolom">1584</td><td class="bredecode"> otherClass = toString.call(b);</td></tr><tr><td class="codekolom">1539</td><td class="codekolom">1585</td><td class="bredecode"> </td></tr><tr><td class="codekolom">1540</td><td class="codekolom">1586</td><td class="bredecode"> if (className == argsClass) {</td></tr><tr><td class="codekolom">1541</td><td class="codekolom">1587</td><td class="bredecode"> className = objectClass;</td></tr><tr><td class="codekolom">1542</td><td class="codekolom">1588</td><td class="bredecode"> }</td></tr><tr><td class="codekolom">1543</td><td class="codekolom">1589</td><td class="bredecode"> if (otherClass == argsClass) {</td></tr><tr><td class="codekolom">1544</td><td class="codekolom">1590</td><td class="bredecode"> otherClass = objectClass;</td></tr><tr><td class="codekolom">1545</td><td class="codekolom">1591</td><td class="bredecode"> }</td></tr><tr><td class="codekolom">1546</td><td class="codekolom">1592</td><td class="bredecode"> if (className != otherClass) {</td></tr><tr><td class="codekolom">1547</td><td class="codekolom">1593</td><td class="bredecode"> return false;</td></tr><tr><td class="codekolom">1548</td><td class="codekolom">1594</td><td class="bredecode"> }</td></tr><tr><td class="codekolom">1549</td><td class="codekolom">1595</td><td class="bredecode"> switch (className) {</td></tr><tr><td class="codekolom">1550</td><td class="codekolom">1596</td><td class="bredecode"> case boolClass:</td></tr><tr><td class="codekolom">1551</td><td class="codekolom">1597</td><td class="bredecode"> case dateClass:</td></tr><tr><td class="codekolom">1552</td><td class="codekolom">1598</td><td class="bredecode"> // coerce dates and booleans to numbers, dates to milliseconds and booleans</td></tr><tr><td class="codekolom">1553</td><td class="codekolom">1599</td><td class="bredecode"> // to `1` or `0`, treating invalid dates coerced to `NaN` as not equal</td></tr><tr><td class="codekolom">1554</td><td class="codekolom">1600</td><td class="bredecode"> return +a == +b;</td></tr><tr><td class="codekolom">1555</td><td class="codekolom">1601</td><td class="bredecode"> </td></tr><tr><td class="codekolom">1556</td><td class="codekolom">1602</td><td class="bredecode"> case numberClass:</td></tr><tr><td class="codekolom">1557</td><td class="codekolom">1603</td><td class="bredecode"> // treat `NaN` vs. `NaN` as equal</td></tr><tr><td class="codekolom">1558</td><td class="codekolom">1604</td><td class="bredecode"> return (a != +a)</td></tr><tr><td class="codekolom">1559</td><td class="codekolom">1605</td><td class="bredecode"> ? b != +b</td></tr><tr><td class="codekolom">1560</td><td class="codekolom">1606</td><td class="bredecode"> // but treat `+0` vs. `-0` as not equal</td></tr><tr><td class="codekolom">1561</td><td class="codekolom">1607</td><td class="bredecode"> : (a == 0 ? (1 / a == 1 / b) : a == +b);</td></tr><tr><td class="codekolom">1562</td><td class="codekolom">1608</td><td class="bredecode"> </td></tr><tr><td class="codekolom">1563</td><td class="codekolom">1609</td><td class="bredecode"> case regexpClass:</td></tr><tr><td class="codekolom">1564</td><td class="codekolom">1610</td><td class="bredecode"> case stringClass:</td></tr><tr><td class="codekolom">1565</td><td class="codekolom">1611</td><td class="bredecode"> // coerce regexes to strings (http://es5.github.com/#x15.10.6.4)</td></tr><tr><td class="codekolom">1566</td><td class="codekolom">1612</td><td class="bredecode"> // treat string primitives and their corresponding object instances as equal</td></tr><tr><td class="codekolom">1567</td><td class="codekolom">1613</td><td class="bredecode"> return a == String(b);</td></tr><tr><td class="codekolom">1568</td><td class="codekolom">1614</td><td class="bredecode"> }</td></tr><tr><td class="codekolom">1569</td><td class="codekolom">1615</td><td class="bredecode"> var isArr = className == arrayClass;</td></tr><tr><td class="codekolom">1570</td><td class="codekolom">1616</td><td class="bredecode"> if (!isArr) {</td></tr><tr><td class="codekolom">1571</td><td class="codekolom">1617</td><td class="bredecode"> // unwrap any `lodash` wrapped values</td></tr><tr><td class="codekolom">1572</td><td class="codekolom">1618</td><td class="bredecode"> if (hasOwnProperty.call(a, '__wrapped__ ') || hasOwnProperty.call(b, '__wrapped__')) {</td></tr><tr><td class="codekolom">1573</td><td class="codekolom">1619</td><td class="bredecode"> return isEqual(a.__wrapped__ || a, b.__wrapped__ || b, callback, thisArg, stackA, stackB);</td></tr><tr><td class="codekolom">1574</td><td class="codekolom">1620</td><td class="bredecode"> }</td></tr><tr><td class="codekolom">1575</td><td class="codekolom">1621</td><td class="bredecode"> // exit for functions and DOM nodes</td></tr><tr><td class="codekolom">1576</td><td class="codekolom">1622</td><td class="bredecode"> if (className != objectClass) {</td></tr><tr><td class="codekolom">1577</td><td class="codekolom">1623</td><td class="bredecode"> return false;</td></tr><tr><td class="codekolom">1578</td><td class="codekolom">1624</td><td class="bredecode"> }</td></tr><tr><td class="codekolom">1579</td><td class="codekolom">1625</td><td class="bredecode"> // in older versions of Opera, `arguments` objects have `Array` constructors</td></tr><tr><td class="codekolom">1580</td><td class="codekolom">1626</td><td class="bredecode"> var ctorA = a.constructor,</td></tr><tr><td class="codekolom">1581</td><td class="codekolom">1627</td><td class="bredecode"> ctorB = b.constructor;</td></tr><tr><td class="codekolom">1582</td><td class="codekolom">1628</td><td class="bredecode"> </td></tr><tr><td class="codekolom">1583</td><td class="codekolom">1629</td><td class="bredecode"> // non `Object` object instances with different constructors are not equal</td></tr><tr><td class="codekolom">1584</td><td class="codekolom">1630</td><td class="bredecode"> if (ctorA != ctorB &amp;&amp; !(</td></tr><tr><td class="codekolom">1585</td><td class="codekolom">1631</td><td class="bredecode"> isFunction(ctorA) &amp;&amp; ctorA instanceof ctorA &amp;&amp;</td></tr><tr><td class="codekolom">1586</td><td class="codekolom">1632</td><td class="bredecode"> isFunction(ctorB) &amp;&amp; ctorB instanceof ctorB</td></tr><tr><td class="codekolom">1587</td><td class="codekolom">1633</td><td class="bredecode"> )) {</td></tr><tr><td class="codekolom">1588</td><td class="codekolom">1634</td><td class="bredecode"> return false;</td></tr><tr><td class="codekolom">1589</td><td class="codekolom">1635</td><td class="bredecode"> }</td></tr><tr><td class="codekolom">1590</td><td class="codekolom">1636</td><td class="bredecode"> }</td></tr><tr><td class="codekolom">1591</td><td class="codekolom">1637</td><td class="bredecode"> // assume cyclic structures are equal</td></tr><tr><td class="codekolom">1592</td><td class="codekolom">1638</td><td class="bredecode"> // the algorithm for detecting cyclic structures is adapted from ES 5.1</td></tr><tr><td class="codekolom">1593</td><td class="codekolom">1639</td><td class="bredecode"> // section 15.12.3, abstract operation `JO` (http://es5.github.com/#x15.12.3)</td></tr><tr><td class="codekolom">1594</td><td class="codekolom">1640</td><td class="bredecode"> var initedStack = !stackA;</td></tr><tr><td class="codekolom">1595</td><td class="codekolom">1641</td><td class="bredecode"> stackA || (stackA = getArray());</td></tr><tr><td class="codekolom">1596</td><td class="codekolom">1642</td><td class="bredecode"> stackB || (stackB = getArray());</td></tr><tr><td class="codekolom">1597</td><td class="codekolom">1643</td><td class="bredecode"> </td></tr><tr><td class="codekolom">1598</td><td class="codekolom">1644</td><td class="bredecode"> var length = stackA.length;</td></tr><tr><td class="codekolom">1599</td><td class="codekolom">1645</td><td class="bredecode"> while (length--) {</td></tr><tr><td class="codekolom">1600</td><td class="codekolom">1646</td><td class="bredecode"> if (stackA[length] == a) {</td></tr><tr><td class="codekolom">1601</td><td class="codekolom">1647</td><td class="bredecode"> return stackB[length] == b;</td></tr><tr><td class="codekolom">1602</td><td class="codekolom">1648</td><td class="bredecode"> }</td></tr><tr><td class="codekolom">1603</td><td class="codekolom">1649</td><td class="bredecode"> }</td></tr><tr><td class="codekolom">1604</td><td class="codekolom">1650</td><td class="bredecode"> var size = 0;</td></tr><tr><td class="codekolom">1605</td><td class="codekolom">1651</td><td class="bredecode"> result = true;</td></tr><tr><td class="codekolom">1606</td><td class="codekolom">1652</td><td class="bredecode"> </td></tr><tr><td class="codekolom">1607</td><td class="codekolom">1653</td><td class="bredecode"> // add `a` and `b` to the stack of traversed objects</td></tr><tr><td class="codekolom">1608</td><td class="codekolom">1654</td><td class="bredecode"> stackA.push(a);</td></tr><tr><td class="codekolom">1609</td><td class="codekolom">1655</td><td class="bredecode"> stackB.push(b);</td></tr><tr><td class="codekolom">1610</td><td class="codekolom">1656</td><td class="bredecode"> </td></tr><tr><td class="codekolom">1611</td><td class="codekolom">1657</td><td class="bredecode"> // recursively compare objects and arrays (susceptible to call stack limits)</td></tr><tr><td class="codekolom">1612</td><td class="codekolom">1658</td><td class="bredecode"> if (isArr) {</td></tr><tr><td class="codekolom">1613</td><td class="codekolom">1659</td><td class="bredecode"> length = a.length;</td></tr><tr><td class="codekolom">1614</td><td class="codekolom">1660</td><td class="bredecode"> size = b.length;</td></tr><tr><td class="codekolom">1615</td><td class="codekolom">1661</td><td class="bredecode"> </td></tr><tr><td class="codekolom">1616</td><td class="codekolom">1662</td><td class="bredecode"> // compare lengths to determine if a deep comparison is necessary</td></tr><tr><td class="codekolom">1617</td><td class="codekolom">1663</td><td class="bredecode"> result = size == a.length;</td></tr><tr><td class="codekolom">1618</td><td class="codekolom">1664</td><td class="bredecode"> if (!result &amp;&amp; !whereIndicator) {</td></tr><tr><td class="codekolom">1619</td><td class="codekolom">1665</td><td class="bredecode"> return result;</td></tr><tr><td class="codekolom">1620</td><td class="codekolom">1666</td><td class="bredecode"> }</td></tr><tr><td class="codekolom">1621</td><td class="codekolom">1667</td><td class="bredecode"> // deep compare the contents, ignoring non-numeric properties</td></tr><tr><td class="codekolom">1622</td><td class="codekolom">1668</td><td class="bredecode"> while (size--) {</td></tr><tr><td class="codekolom">1623</td><td class="codekolom">1669</td><td class="bredecode"> var index = length,</td></tr><tr><td class="codekolom">1624</td><td class="codekolom">1670</td><td class="bredecode"> value = b[size];</td></tr><tr><td class="codekolom">1625</td><td class="codekolom">1671</td><td class="bredecode"> </td></tr><tr><td class="codekolom">1626</td><td class="codekolom">1672</td><td class="bredecode"> if (whereIndicator) {</td></tr><tr><td class="codekolom">1627</td><td class="codekolom">1673</td><td class="bredecode"> while (index--) {</td></tr><tr><td class="codekolom">1628</td><td class="codekolom">1674</td><td class="bredecode"> if ((result = isEqual(a[index], value, callback, thisArg, stackA, stackB))) {</td></tr><tr><td class="codekolom">1629</td><td class="codekolom">1675</td><td class="bredecode"> break;</td></tr><tr><td class="codekolom">1630</td><td class="codekolom">1676</td><td class="bredecode"> }</td></tr><tr><td class="codekolom">1631</td><td class="codekolom">1677</td><td class="bredecode"> }</td></tr><tr><td class="codekolom">1632</td><td class="codekolom">1678</td><td class="bredecode"> } else if (!(result = isEqual(a[size], value, callback, thisArg, stackA, stackB))) {</td></tr><tr><td class="codekolom">1633</td><td class="codekolom">1679</td><td class="bredecode"> break;</td></tr><tr><td class="codekolom">1634</td><td class="codekolom">1680</td><td class="bredecode"> }</td></tr><tr><td class="codekolom">1635</td><td class="codekolom">1681</td><td class="bredecode"> }</td></tr><tr><td class="codekolom">1636</td><td class="codekolom">1682</td><td class="bredecode"> return result;</td></tr><tr><td class="codekolom">1637</td><td class="codekolom">1683</td><td class="bredecode"> }</td></tr><tr><td class="codekolom">1638</td><td class="codekolom">1684</td><td class="bredecode"> // deep compare objects using `forIn`, instead of `forOwn`, to avoid `Object.keys`</td></tr><tr><td class="codekolom">1639</td><td class="codekolom">1685</td><td class="bredecode"> // which, in this case, is more costly</td></tr><tr><td class="codekolom">1640</td><td class="codekolom">1686</td><td class="bredecode"> forIn(b, function(value, key, b) {</td></tr><tr><td class="codekolom">1641</td><td class="codekolom">1687</td><td class="bredecode"> if (hasOwnProperty.call(b, key)) {</td></tr><tr><td class="codekolom">1642</td><td class="codekolom">1688</td><td class="bredecode"> // count the number of properties.</td></tr><tr><td class="codekolom">1643</td><td class="codekolom">1689</td><td class="bredecode"> size++;</td></tr><tr><td class="codekolom">1644</td><td class="codekolom">1690</td><td class="bredecode"> // deep compare each property value.</td></tr><tr><td class="codekolom">1645</td><td class="codekolom">1691</td><td class="bredecode"> return (result = hasOwnProperty.call(a, key) &amp;&amp; isEqual(a[key], value, callback, thisArg, stackA, stackB));</td></tr><tr><td class="codekolom">1646</td><td class="codekolom">1692</td><td class="bredecode"> }</td></tr><tr><td class="codekolom">1647</td><td class="codekolom">1693</td><td class="bredecode"> });</td></tr><tr><td class="codekolom">1648</td><td class="codekolom">1694</td><td class="bredecode"> </td></tr><tr><td class="codekolom">1649</td><td class="codekolom">1695</td><td class="bredecode"> if (result &amp;&amp; !whereIndicator) {</td></tr><tr><td class="codekolom">1650</td><td class="codekolom">1696</td><td class="bredecode"> // ensure both objects have the same number of properties</td></tr><tr><td class="codekolom">1651</td><td class="codekolom">1697</td><td class="bredecode"> forIn(a, function(value, key, a) {</td></tr><tr><td class="codekolom">1652</td><td class="codekolom">1698</td><td class="bredecode"> if (hasOwnProperty.call(a, key)) {</td></tr><tr><td class="codekolom">1653</td><td class="codekolom">1699</td><td class="bredecode"> // `size` will be `-1` if `a` has more properties than `b`</td></tr><tr><td class="codekolom">1654</td><td class="codekolom">1700</td><td class="bredecode"> return (result = --size &gt; -1);</td></tr><tr><td class="codekolom">1655</td><td class="codekolom">1701</td><td class="bredecode"> }</td></tr><tr><td class="codekolom">1656</td><td class="codekolom">1702</td><td class="bredecode"> });</td></tr><tr><td class="codekolom">1657</td><td class="codekolom">1703</td><td class="bredecode"> }</td></tr><tr><td class="codekolom">1658</td><td class="codekolom">1704</td><td class="bredecode"> if (initedStack) {</td></tr><tr><td class="codekolom">1659</td><td class="codekolom">1705</td><td class="bredecode"> releaseArray(stackA);</td></tr><tr><td class="codekolom">1660</td><td class="codekolom">1706</td><td class="bredecode"> releaseArray(stackB);</td></tr><tr><td class="codekolom">1661</td><td class="codekolom">1707</td><td class="bredecode"> }</td></tr><tr><td class="codekolom">1662</td><td class="codekolom">1708</td><td class="bredecode"> return result;</td></tr><tr class="del"><td class="codekolom">1663</td><td class="codekolom"></td><td class="bredecode">- }</td></tr><tr class="add"><td class="codekolom"></td><td class="codekolom">1709</td><td class="bredecode">+ }.autoCurry(2)</td></tr><tr><td class="codekolom">1664</td><td class="codekolom">1710</td><td class="bredecode"> </td></tr><tr><td class="codekolom">1665</td><td class="codekolom">1711</td><td class="bredecode"> /**</td></tr><tr><td class="codekolom">1666</td><td class="codekolom">1712</td><td class="bredecode"> * Checks if `value` is, or can be coerced to, a finite number.</td></tr><tr><td class="codekolom">1667</td><td class="codekolom">1713</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">1668</td><td class="codekolom">1714</td><td class="bredecode"> * Note: This is not the same as native `isFinite`, which will return true for</td></tr><tr><td class="codekolom">1669</td><td class="codekolom">1715</td><td class="bredecode"> * booleans and empty strings. See http://es5.github.com/#x15.1.2.5.</td></tr><tr><td class="codekolom">1670</td><td class="codekolom">1716</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">1671</td><td class="codekolom">1717</td><td class="bredecode"> * @static</td></tr><tr><td class="codekolom">1672</td><td class="codekolom">1718</td><td class="bredecode"> * @memberOf _</td></tr><tr><td class="codekolom">1673</td><td class="codekolom">1719</td><td class="bredecode"> * @category Objects</td></tr><tr><td class="codekolom">1674</td><td class="codekolom">1720</td><td class="bredecode"> * @param {Mixed} value The value to check.</td></tr><tr><td class="codekolom">1675</td><td class="codekolom">1721</td><td class="bredecode"> * @returns {Boolean} Returns `true`, if the `value` is finite, else `false`.</td></tr><tr><td class="codekolom">1676</td><td class="codekolom">1722</td><td class="bredecode"> * @example</td></tr><tr><td class="codekolom">1677</td><td class="codekolom">1723</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">1678</td><td class="codekolom">1724</td><td class="bredecode"> * _.isFinite(-101);</td></tr><tr><td class="codekolom">1679</td><td class="codekolom">1725</td><td class="bredecode"> * // =&gt; true</td></tr><tr><td class="codekolom">1680</td><td class="codekolom">1726</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">1681</td><td class="codekolom">1727</td><td class="bredecode"> * _.isFinite('10');</td></tr><tr><td class="codekolom">1682</td><td class="codekolom">1728</td><td class="bredecode"> * // =&gt; true</td></tr><tr><td class="codekolom">1683</td><td class="codekolom">1729</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">1684</td><td class="codekolom">1730</td><td class="bredecode"> * _.isFinite(true);</td></tr><tr><td class="codekolom">1685</td><td class="codekolom">1731</td><td class="bredecode"> * // =&gt; false</td></tr><tr><td class="codekolom">1686</td><td class="codekolom">1732</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">1687</td><td class="codekolom">1733</td><td class="bredecode"> * _.isFinite('');</td></tr><tr><td class="codekolom">1688</td><td class="codekolom">1734</td><td class="bredecode"> * // =&gt; false</td></tr><tr><td class="codekolom">1689</td><td class="codekolom">1735</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">1690</td><td class="codekolom">1736</td><td class="bredecode"> * _.isFinite(Infinity);</td></tr><tr><td class="codekolom">1691</td><td class="codekolom">1737</td><td class="bredecode"> * // =&gt; false</td></tr><tr><td class="codekolom">1692</td><td class="codekolom">1738</td><td class="bredecode"> */</td></tr><tr><td class="codekolom">1693</td><td class="codekolom">1739</td><td class="bredecode"> function isFinite(value) {</td></tr><tr><td class="codekolom">1694</td><td class="codekolom">1740</td><td class="bredecode"> return nativeIsFinite(value) &amp;&amp; !nativeIsNaN(parseFloat(value));</td></tr><tr><td class="codekolom">1695</td><td class="codekolom">1741</td><td class="bredecode"> }</td></tr><tr><td class="codekolom">1696</td><td class="codekolom">1742</td><td class="bredecode"> </td></tr><tr><td class="codekolom">1697</td><td class="codekolom">1743</td><td class="bredecode"> /**</td></tr><tr><td class="codekolom">1698</td><td class="codekolom">1744</td><td class="bredecode"> * Checks if `value` is a function.</td></tr><tr><td class="codekolom">1699</td><td class="codekolom">1745</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">1700</td><td class="codekolom">1746</td><td class="bredecode"> * @static</td></tr><tr><td class="codekolom">1701</td><td class="codekolom">1747</td><td class="bredecode"> * @memberOf _</td></tr><tr><td class="codekolom">1702</td><td class="codekolom">1748</td><td class="bredecode"> * @category Objects</td></tr><tr><td class="codekolom">1703</td><td class="codekolom">1749</td><td class="bredecode"> * @param {Mixed} value The value to check.</td></tr><tr><td class="codekolom">1704</td><td class="codekolom">1750</td><td class="bredecode"> * @returns {Boolean} Returns `true`, if the `value` is a function, else `false`.</td></tr><tr><td class="codekolom">1705</td><td class="codekolom">1751</td><td class="bredecode"> * @example</td></tr><tr><td class="codekolom">1706</td><td class="codekolom">1752</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">1707</td><td class="codekolom">1753</td><td class="bredecode"> * _.isFunction(_);</td></tr><tr><td class="codekolom">1708</td><td class="codekolom">1754</td><td class="bredecode"> * // =&gt; true</td></tr><tr><td class="codekolom">1709</td><td class="codekolom">1755</td><td class="bredecode"> */</td></tr><tr><td class="codekolom">1710</td><td class="codekolom">1756</td><td class="bredecode"> function isFunction(value) {</td></tr><tr><td class="codekolom">1711</td><td class="codekolom">1757</td><td class="bredecode"> return typeof value == 'function';</td></tr><tr><td class="codekolom">1712</td><td class="codekolom">1758</td><td class="bredecode"> }</td></tr><tr><td class="codekolom">1713</td><td class="codekolom">1759</td><td class="bredecode"> </td></tr><tr><td class="codekolom">1714</td><td class="codekolom">1760</td><td class="bredecode"> /**</td></tr><tr><td class="codekolom">1715</td><td class="codekolom">1761</td><td class="bredecode"> * Checks if `value` is the language type of Object.</td></tr><tr><td class="codekolom">1716</td><td class="codekolom">1762</td><td class="bredecode"> * (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)</td></tr><tr><td class="codekolom">1717</td><td class="codekolom">1763</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">1718</td><td class="codekolom">1764</td><td class="bredecode"> * @static</td></tr><tr><td class="codekolom">1719</td><td class="codekolom">1765</td><td class="bredecode"> * @memberOf _</td></tr><tr><td class="codekolom">1720</td><td class="codekolom">1766</td><td class="bredecode"> * @category Objects</td></tr><tr><td class="codekolom">1721</td><td class="codekolom">1767</td><td class="bredecode"> * @param {Mixed} value The value to check.</td></tr><tr><td class="codekolom">1722</td><td class="codekolom">1768</td><td class="bredecode"> * @returns {Boolean} Returns `true`, if the `value` is an object, else `false`.</td></tr><tr><td class="codekolom">1723</td><td class="codekolom">1769</td><td class="bredecode"> * @example</td></tr><tr><td class="codekolom">1724</td><td class="codekolom">1770</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">1725</td><td class="codekolom">1771</td><td class="bredecode"> * _.isObject({});</td></tr><tr><td class="codekolom">1726</td><td class="codekolom">1772</td><td class="bredecode"> * // =&gt; true</td></tr><tr><td class="codekolom">1727</td><td class="codekolom">1773</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">1728</td><td class="codekolom">1774</td><td class="bredecode"> * _.isObject([1, 2, 3]);</td></tr><tr><td class="codekolom">1729</td><td class="codekolom">1775</td><td class="bredecode"> * // =&gt; true</td></tr><tr><td class="codekolom">1730</td><td class="codekolom">1776</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">1731</td><td class="codekolom">1777</td><td class="bredecode"> * _.isObject(1);</td></tr><tr><td class="codekolom">1732</td><td class="codekolom">1778</td><td class="bredecode"> * // =&gt; false</td></tr><tr><td class="codekolom">1733</td><td class="codekolom">1779</td><td class="bredecode"> */</td></tr><tr><td class="codekolom">1734</td><td class="codekolom">1780</td><td class="bredecode"> function isObject(value) {</td></tr><tr><td class="codekolom">1735</td><td class="codekolom">1781</td><td class="bredecode"> // check if the value is the ECMAScript language type of Object</td></tr><tr><td class="codekolom">1736</td><td class="codekolom">1782</td><td class="bredecode"> // http://es5.github.com/#x8</td></tr><tr><td class="codekolom">1737</td><td class="codekolom">1783</td><td class="bredecode"> // and avoid a V8 bug</td></tr><tr><td class="codekolom">1738</td><td class="codekolom">1784</td><td class="bredecode"> // http://code.google.com/p/v8/issues/detail?id=2291</td></tr><tr><td class="codekolom">1739</td><td class="codekolom">1785</td><td class="bredecode"> return !!(value &amp;&amp; objectTypes[typeof value]);</td></tr><tr><td class="codekolom">1740</td><td class="codekolom">1786</td><td class="bredecode"> }</td></tr><tr><td class="codekolom">1741</td><td class="codekolom">1787</td><td class="bredecode"> </td></tr><tr><td class="codekolom">1742</td><td class="codekolom">1788</td><td class="bredecode"> /**</td></tr><tr><td class="codekolom">1743</td><td class="codekolom">1789</td><td class="bredecode"> * Checks if `value` is `NaN`.</td></tr><tr><td class="codekolom">1744</td><td class="codekolom">1790</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">1745</td><td class="codekolom">1791</td><td class="bredecode"> * Note: This is not the same as native `isNaN`, which will return `true` for</td></tr><tr><td class="codekolom">1746</td><td class="codekolom">1792</td><td class="bredecode"> * `undefined` and other values. See http://es5.github.com/#x15.1.2.4.</td></tr><tr><td class="codekolom">1747</td><td class="codekolom">1793</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">1748</td><td class="codekolom">1794</td><td class="bredecode"> * @static</td></tr><tr><td class="codekolom">1749</td><td class="codekolom">1795</td><td class="bredecode"> * @memberOf _</td></tr><tr><td class="codekolom">1750</td><td class="codekolom">1796</td><td class="bredecode"> * @category Objects</td></tr><tr><td class="codekolom">1751</td><td class="codekolom">1797</td><td class="bredecode"> * @param {Mixed} value The value to check.</td></tr><tr><td class="codekolom">1752</td><td class="codekolom">1798</td><td class="bredecode"> * @returns {Boolean} Returns `true`, if the `value` is `NaN`, else `false`.</td></tr><tr><td class="codekolom">1753</td><td class="codekolom">1799</td><td class="bredecode"> * @example</td></tr><tr><td class="codekolom">1754</td><td class="codekolom">1800</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">1755</td><td class="codekolom">1801</td><td class="bredecode"> * _.isNaN(NaN);</td></tr><tr><td class="codekolom">1756</td><td class="codekolom">1802</td><td class="bredecode"> * // =&gt; true</td></tr><tr><td class="codekolom">1757</td><td class="codekolom">1803</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">1758</td><td class="codekolom">1804</td><td class="bredecode"> * _.isNaN(new Number(NaN));</td></tr><tr><td class="codekolom">1759</td><td class="codekolom">1805</td><td class="bredecode"> * // =&gt; true</td></tr><tr><td class="codekolom">1760</td><td class="codekolom">1806</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">1761</td><td class="codekolom">1807</td><td class="bredecode"> * isNaN(undefined);</td></tr><tr><td class="codekolom">1762</td><td class="codekolom">1808</td><td class="bredecode"> * // =&gt; true</td></tr><tr><td class="codekolom">1763</td><td class="codekolom">1809</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">1764</td><td class="codekolom">1810</td><td class="bredecode"> * _.isNaN(undefined);</td></tr><tr><td class="codekolom">1765</td><td class="codekolom">1811</td><td class="bredecode"> * // =&gt; false</td></tr><tr><td class="codekolom">1766</td><td class="codekolom">1812</td><td class="bredecode"> */</td></tr><tr><td class="codekolom">1767</td><td class="codekolom">1813</td><td class="bredecode"> function isNaN(value) {</td></tr><tr><td class="codekolom">1768</td><td class="codekolom">1814</td><td class="bredecode"> // `NaN` as a primitive is the only value that is not equal to itself</td></tr><tr><td class="codekolom">1769</td><td class="codekolom">1815</td><td class="bredecode"> // (perform the [[Class]] check first to avoid errors with some host objects in IE)</td></tr><tr><td class="codekolom">1770</td><td class="codekolom">1816</td><td class="bredecode"> return isNumber(value) &amp;&amp; value != +value</td></tr><tr><td class="codekolom">1771</td><td class="codekolom">1817</td><td class="bredecode"> }</td></tr><tr><td class="codekolom">1772</td><td class="codekolom">1818</td><td class="bredecode"> </td></tr><tr><td class="codekolom">1773</td><td class="codekolom">1819</td><td class="bredecode"> /**</td></tr><tr><td class="codekolom">1774</td><td class="codekolom">1820</td><td class="bredecode"> * Checks if `value` is `null`.</td></tr><tr><td class="codekolom">1775</td><td class="codekolom">1821</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">1776</td><td class="codekolom">1822</td><td class="bredecode"> * @static</td></tr><tr><td class="codekolom">1777</td><td class="codekolom">1823</td><td class="bredecode"> * @memberOf _</td></tr><tr><td class="codekolom">1778</td><td class="codekolom">1824</td><td class="bredecode"> * @category Objects</td></tr><tr><td class="codekolom">1779</td><td class="codekolom">1825</td><td class="bredecode"> * @param {Mixed} value The value to check.</td></tr><tr><td class="codekolom">1780</td><td class="codekolom">1826</td><td class="bredecode"> * @returns {Boolean} Returns `true`, if the `value` is `null`, else `false`.</td></tr><tr><td class="codekolom">1781</td><td class="codekolom">1827</td><td class="bredecode"> * @example</td></tr><tr><td class="codekolom">1782</td><td class="codekolom">1828</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">1783</td><td class="codekolom">1829</td><td class="bredecode"> * _.isNull(null);</td></tr><tr><td class="codekolom">1784</td><td class="codekolom">1830</td><td class="bredecode"> * // =&gt; true</td></tr><tr><td class="codekolom">1785</td><td class="codekolom">1831</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">1786</td><td class="codekolom">1832</td><td class="bredecode"> * _.isNull(undefined);</td></tr><tr><td class="codekolom">1787</td><td class="codekolom">1833</td><td class="bredecode"> * // =&gt; false</td></tr><tr><td class="codekolom">1788</td><td class="codekolom">1834</td><td class="bredecode"> */</td></tr><tr><td class="codekolom">1789</td><td class="codekolom">1835</td><td class="bredecode"> function isNull(value) {</td></tr><tr><td class="codekolom">1790</td><td class="codekolom">1836</td><td class="bredecode"> return value === null;</td></tr><tr><td class="codekolom">1791</td><td class="codekolom">1837</td><td class="bredecode"> }</td></tr><tr><td class="codekolom">1792</td><td class="codekolom">1838</td><td class="bredecode"> </td></tr><tr><td class="codekolom">1793</td><td class="codekolom">1839</td><td class="bredecode"> /**</td></tr><tr><td class="codekolom">1794</td><td class="codekolom">1840</td><td class="bredecode"> * Checks if `value` is a number.</td></tr><tr><td class="codekolom">1795</td><td class="codekolom">1841</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">1796</td><td class="codekolom">1842</td><td class="bredecode"> * @static</td></tr><tr><td class="codekolom">1797</td><td class="codekolom">1843</td><td class="bredecode"> * @memberOf _</td></tr><tr><td class="codekolom">1798</td><td class="codekolom">1844</td><td class="bredecode"> * @category Objects</td></tr><tr><td class="codekolom">1799</td><td class="codekolom">1845</td><td class="bredecode"> * @param {Mixed} value The value to check.</td></tr><tr><td class="codekolom">1800</td><td class="codekolom">1846</td><td class="bredecode"> * @returns {Boolean} Returns `true`, if the `value` is a number, else `false`.</td></tr><tr><td class="codekolom">1801</td><td class="codekolom">1847</td><td class="bredecode"> * @example</td></tr><tr><td class="codekolom">1802</td><td class="codekolom">1848</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">1803</td><td class="codekolom">1849</td><td class="bredecode"> * _.isNumber(8.4 * 5);</td></tr><tr><td class="codekolom">1804</td><td class="codekolom">1850</td><td class="bredecode"> * // =&gt; true</td></tr><tr><td class="codekolom">1805</td><td class="codekolom">1851</td><td class="bredecode"> */</td></tr><tr><td class="codekolom">1806</td><td class="codekolom">1852</td><td class="bredecode"> function isNumber(value) {</td></tr><tr><td class="codekolom">1807</td><td class="codekolom">1853</td><td class="bredecode"> return typeof value == 'number' || toString.call(value) == numberClass;</td></tr><tr><td class="codekolom">1808</td><td class="codekolom">1854</td><td class="bredecode"> }</td></tr><tr><td class="codekolom">1809</td><td class="codekolom">1855</td><td class="bredecode"> </td></tr><tr><td class="codekolom">1810</td><td class="codekolom">1856</td><td class="bredecode"> /**</td></tr><tr><td class="codekolom">1811</td><td class="codekolom">1857</td><td class="bredecode"> * Checks if a given `value` is an object created by the `Object` constructor.</td></tr><tr><td class="codekolom">1812</td><td class="codekolom">1858</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">1813</td><td class="codekolom">1859</td><td class="bredecode"> * @static</td></tr><tr><td class="codekolom">1814</td><td class="codekolom">1860</td><td class="bredecode"> * @memberOf _</td></tr><tr><td class="codekolom">1815</td><td class="codekolom">1861</td><td class="bredecode"> * @category Objects</td></tr><tr><td class="codekolom">1816</td><td class="codekolom">1862</td><td class="bredecode"> * @param {Mixed} value The value to check.</td></tr><tr><td class="codekolom">1817</td><td class="codekolom">1863</td><td class="bredecode"> * @returns {Boolean} Returns `true`, if `value` is a plain object, else `false`.</td></tr><tr><td class="codekolom">1818</td><td class="codekolom">1864</td><td class="bredecode"> * @example</td></tr><tr><td class="codekolom">1819</td><td class="codekolom">1865</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">1820</td><td class="codekolom">1866</td><td class="bredecode"> * function Stooge(name, age) {</td></tr><tr><td class="codekolom">1821</td><td class="codekolom">1867</td><td class="bredecode"> * this.name = name;</td></tr><tr><td class="codekolom">1822</td><td class="codekolom">1868</td><td class="bredecode"> * this.age = age;</td></tr><tr><td class="codekolom">1823</td><td class="codekolom">1869</td><td class="bredecode"> * }</td></tr><tr><td class="codekolom">1824</td><td class="codekolom">1870</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">1825</td><td class="codekolom">1871</td><td class="bredecode"> * _.isPlainObject(new Stooge('moe', 40));</td></tr><tr><td class="codekolom">1826</td><td class="codekolom">1872</td><td class="bredecode"> * // =&gt; false</td></tr><tr><td class="codekolom">1827</td><td class="codekolom">1873</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">1828</td><td class="codekolom">1874</td><td class="bredecode"> * _.isPlainObject([1, 2, 3]);</td></tr><tr><td class="codekolom">1829</td><td class="codekolom">1875</td><td class="bredecode"> * // =&gt; false</td></tr><tr><td class="codekolom">1830</td><td class="codekolom">1876</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">1831</td><td class="codekolom">1877</td><td class="bredecode"> * _.isPlainObject({ 'name': 'moe', 'age': 40 });</td></tr><tr><td class="codekolom">1832</td><td class="codekolom">1878</td><td class="bredecode"> * // =&gt; true</td></tr><tr><td class="codekolom">1833</td><td class="codekolom">1879</td><td class="bredecode"> */</td></tr><tr><td class="codekolom">1834</td><td class="codekolom">1880</td><td class="bredecode"> var isPlainObject = function(value) {</td></tr><tr><td class="codekolom">1835</td><td class="codekolom">1881</td><td class="bredecode"> if (!(value &amp;&amp; toString.call(value) == objectClass)) {</td></tr><tr><td class="codekolom">1836</td><td class="codekolom">1882</td><td class="bredecode"> return false;</td></tr><tr><td class="codekolom">1837</td><td class="codekolom">1883</td><td class="bredecode"> }</td></tr><tr><td class="codekolom">1838</td><td class="codekolom">1884</td><td class="bredecode"> var valueOf = value.valueOf,</td></tr><tr><td class="codekolom">1839</td><td class="codekolom">1885</td><td class="bredecode"> objProto = typeof valueOf == 'function' &amp;&amp; (objProto = getPrototypeOf(valueOf)) &amp;&amp; getPrototypeOf(objProto);</td></tr><tr><td class="codekolom">1840</td><td class="codekolom">1886</td><td class="bredecode"> </td></tr><tr><td class="codekolom">1841</td><td class="codekolom">1887</td><td class="bredecode"> return objProto</td></tr><tr><td class="codekolom">1842</td><td class="codekolom">1888</td><td class="bredecode"> ? (value == objProto || getPrototypeOf(value) == objProto)</td></tr><tr><td class="codekolom">1843</td><td class="codekolom">1889</td><td class="bredecode"> : shimIsPlainObject(value);</td></tr><tr><td class="codekolom">1844</td><td class="codekolom">1890</td><td class="bredecode"> };</td></tr><tr><td class="codekolom">1845</td><td class="codekolom">1891</td><td class="bredecode"> </td></tr><tr><td class="codekolom">1846</td><td class="codekolom">1892</td><td class="bredecode"> /**</td></tr><tr><td class="codekolom">1847</td><td class="codekolom">1893</td><td class="bredecode"> * Checks if `value` is a regular expression.</td></tr><tr><td class="codekolom">1848</td><td class="codekolom">1894</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">1849</td><td class="codekolom">1895</td><td class="bredecode"> * @static</td></tr><tr><td class="codekolom">1850</td><td class="codekolom">1896</td><td class="bredecode"> * @memberOf _</td></tr><tr><td class="codekolom">1851</td><td class="codekolom">1897</td><td class="bredecode"> * @category Objects</td></tr><tr><td class="codekolom">1852</td><td class="codekolom">1898</td><td class="bredecode"> * @param {Mixed} value The value to check.</td></tr><tr><td class="codekolom">1853</td><td class="codekolom">1899</td><td class="bredecode"> * @returns {Boolean} Returns `true`, if the `value` is a regular expression, else `false`.</td></tr><tr><td class="codekolom">1854</td><td class="codekolom">1900</td><td class="bredecode"> * @example</td></tr><tr><td class="codekolom">1855</td><td class="codekolom">1901</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">1856</td><td class="codekolom">1902</td><td class="bredecode"> * _.isRegExp(/moe/);</td></tr><tr><td class="codekolom">1857</td><td class="codekolom">1903</td><td class="bredecode"> * // =&gt; true</td></tr><tr><td class="codekolom">1858</td><td class="codekolom">1904</td><td class="bredecode"> */</td></tr><tr><td class="codekolom">1859</td><td class="codekolom">1905</td><td class="bredecode"> function isRegExp(value) {</td></tr><tr><td class="codekolom">1860</td><td class="codekolom">1906</td><td class="bredecode"> return value ? (typeof value == 'object' &amp;&amp; toString.call(value) == regexpClass) : false;</td></tr><tr><td class="codekolom">1861</td><td class="codekolom">1907</td><td class="bredecode"> }</td></tr><tr><td class="codekolom">1862</td><td class="codekolom">1908</td><td class="bredecode"> </td></tr><tr><td class="codekolom">1863</td><td class="codekolom">1909</td><td class="bredecode"> /**</td></tr><tr><td class="codekolom">1864</td><td class="codekolom">1910</td><td class="bredecode"> * Checks if `value` is a string.</td></tr><tr><td class="codekolom">1865</td><td class="codekolom">1911</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">1866</td><td class="codekolom">1912</td><td class="bredecode"> * @static</td></tr><tr><td class="codekolom">1867</td><td class="codekolom">1913</td><td class="bredecode"> * @memberOf _</td></tr><tr><td class="codekolom">1868</td><td class="codekolom">1914</td><td class="bredecode"> * @category Objects</td></tr><tr><td class="codekolom">1869</td><td class="codekolom">1915</td><td class="bredecode"> * @param {Mixed} value The value to check.</td></tr><tr><td class="codekolom">1870</td><td class="codekolom">1916</td><td class="bredecode"> * @returns {Boolean} Returns `true`, if the `value` is a string, else `false`.</td></tr><tr><td class="codekolom">1871</td><td class="codekolom">1917</td><td class="bredecode"> * @example</td></tr><tr><td class="codekolom">1872</td><td class="codekolom">1918</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">1873</td><td class="codekolom">1919</td><td class="bredecode"> * _.isString('moe');</td></tr><tr><td class="codekolom">1874</td><td class="codekolom">1920</td><td class="bredecode"> * // =&gt; true</td></tr><tr><td class="codekolom">1875</td><td class="codekolom">1921</td><td class="bredecode"> */</td></tr><tr><td class="codekolom">1876</td><td class="codekolom">1922</td><td class="bredecode"> function isString(value) {</td></tr><tr><td class="codekolom">1877</td><td class="codekolom">1923</td><td class="bredecode"> return typeof value == 'string' || toString.call(value) == stringClass;</td></tr><tr><td class="codekolom">1878</td><td class="codekolom">1924</td><td class="bredecode"> }</td></tr><tr><td class="codekolom">1879</td><td class="codekolom">1925</td><td class="bredecode"> </td></tr><tr><td class="codekolom">1880</td><td class="codekolom">1926</td><td class="bredecode"> /**</td></tr><tr><td class="codekolom">1881</td><td class="codekolom">1927</td><td class="bredecode"> * Checks if `value` is `undefined`.</td></tr><tr><td class="codekolom">1882</td><td class="codekolom">1928</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">1883</td><td class="codekolom">1929</td><td class="bredecode"> * @static</td></tr><tr><td class="codekolom">1884</td><td class="codekolom">1930</td><td class="bredecode"> * @memberOf _</td></tr><tr><td class="codekolom">1885</td><td class="codekolom">1931</td><td class="bredecode"> * @category Objects</td></tr><tr><td class="codekolom">1886</td><td class="codekolom">1932</td><td class="bredecode"> * @param {Mixed} value The value to check.</td></tr><tr><td class="codekolom">1887</td><td class="codekolom">1933</td><td class="bredecode"> * @returns {Boolean} Returns `true`, if the `value` is `undefined`, else `false`.</td></tr><tr><td class="codekolom">1888</td><td class="codekolom">1934</td><td class="bredecode"> * @example</td></tr><tr><td class="codekolom">1889</td><td class="codekolom">1935</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">1890</td><td class="codekolom">1936</td><td class="bredecode"> * _.isUndefined(void 0);</td></tr><tr><td class="codekolom">1891</td><td class="codekolom">1937</td><td class="bredecode"> * // =&gt; true</td></tr><tr><td class="codekolom">1892</td><td class="codekolom">1938</td><td class="bredecode"> */</td></tr><tr><td class="codekolom">1893</td><td class="codekolom">1939</td><td class="bredecode"> function isUndefined(value) {</td></tr><tr><td class="codekolom">1894</td><td class="codekolom">1940</td><td class="bredecode"> return typeof value == 'undefined';</td></tr><tr><td class="codekolom">1895</td><td class="codekolom">1941</td><td class="bredecode"> }</td></tr><tr><td class="codekolom">1896</td><td class="codekolom">1942</td><td class="bredecode"> </td></tr><tr><td class="codekolom">1897</td><td class="codekolom">1943</td><td class="bredecode"> /**</td></tr><tr><td class="codekolom">1898</td><td class="codekolom">1944</td><td class="bredecode"> * Recursively merges own enumerable properties of the source object(s), that</td></tr><tr><td class="codekolom">1899</td><td class="codekolom">1945</td><td class="bredecode"> * don't resolve to `undefined`, into the destination object. Subsequent sources</td></tr><tr><td class="codekolom">1900</td><td class="codekolom">1946</td><td class="bredecode"> * will overwrite property assignments of previous sources. If a `callback` function</td></tr><tr><td class="codekolom">1901</td><td class="codekolom">1947</td><td class="bredecode"> * is passed, it will be executed to produce the merged values of the destination</td></tr><tr><td class="codekolom">1902</td><td class="codekolom">1948</td><td class="bredecode"> * and source properties. If `callback` returns `undefined`, merging will be</td></tr><tr><td class="codekolom">1903</td><td class="codekolom">1949</td><td class="bredecode"> * handled by the method instead. The `callback` is bound to `thisArg` and</td></tr><tr><td class="codekolom">1904</td><td class="codekolom">1950</td><td class="bredecode"> * invoked with two arguments; (objectValue, sourceValue).</td></tr><tr><td class="codekolom">1905</td><td class="codekolom">1951</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">1906</td><td class="codekolom">1952</td><td class="bredecode"> * @static</td></tr><tr><td class="codekolom">1907</td><td class="codekolom">1953</td><td class="bredecode"> * @memberOf _</td></tr><tr><td class="codekolom">1908</td><td class="codekolom">1954</td><td class="bredecode"> * @category Objects</td></tr><tr><td class="codekolom">1909</td><td class="codekolom">1955</td><td class="bredecode"> * @param {Object} object The destination object.</td></tr><tr><td class="codekolom">1910</td><td class="codekolom">1956</td><td class="bredecode"> * @param {Object} [source1, source2, ...] The source objects.</td></tr><tr><td class="codekolom">1911</td><td class="codekolom">1957</td><td class="bredecode"> * @param {Function} [callback] The function to customize merging properties.</td></tr><tr><td class="codekolom">1912</td><td class="codekolom">1958</td><td class="bredecode"> * @param {Mixed} [thisArg] The `this` binding of `callback`.</td></tr><tr><td class="codekolom">1913</td><td class="codekolom">1959</td><td class="bredecode"> * @param- {Object} [deepIndicator] Indicates that `stackA` and `stackB` are</td></tr><tr><td class="codekolom">1914</td><td class="codekolom">1960</td><td class="bredecode"> * arrays of traversed objects, instead of source objects.</td></tr><tr><td class="codekolom">1915</td><td class="codekolom">1961</td><td class="bredecode"> * @param- {Array} [stackA=[]] Tracks traversed source objects.</td></tr><tr><td class="codekolom">1916</td><td class="codekolom">1962</td><td class="bredecode"> * @param- {Array} [stackB=[]] Associates values with source counterparts.</td></tr><tr><td class="codekolom">1917</td><td class="codekolom">1963</td><td class="bredecode"> * @returns {Object} Returns the destination object.</td></tr><tr><td class="codekolom">1918</td><td class="codekolom">1964</td><td class="bredecode"> * @example</td></tr><tr><td class="codekolom">1919</td><td class="codekolom">1965</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">1920</td><td class="codekolom">1966</td><td class="bredecode"> * var names = {</td></tr><tr><td class="codekolom">1921</td><td class="codekolom">1967</td><td class="bredecode"> * 'stooges': [</td></tr><tr><td class="codekolom">1922</td><td class="codekolom">1968</td><td class="bredecode"> * { 'name': 'moe' },</td></tr><tr><td class="codekolom">1923</td><td class="codekolom">1969</td><td class="bredecode"> * { 'name': 'larry' }</td></tr><tr><td class="codekolom">1924</td><td class="codekolom">1970</td><td class="bredecode"> * ]</td></tr><tr><td class="codekolom">1925</td><td class="codekolom">1971</td><td class="bredecode"> * };</td></tr><tr><td class="codekolom">1926</td><td class="codekolom">1972</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">1927</td><td class="codekolom">1973</td><td class="bredecode"> * var ages = {</td></tr><tr><td class="codekolom">1928</td><td class="codekolom">1974</td><td class="bredecode"> * 'stooges': [</td></tr><tr><td class="codekolom">1929</td><td class="codekolom">1975</td><td class="bredecode"> * { 'age': 40 },</td></tr><tr><td class="codekolom">1930</td><td class="codekolom">1976</td><td class="bredecode"> * { 'age': 50 }</td></tr><tr><td class="codekolom">1931</td><td class="codekolom">1977</td><td class="bredecode"> * ]</td></tr><tr><td class="codekolom">1932</td><td class="codekolom">1978</td><td class="bredecode"> * };</td></tr><tr><td class="codekolom">1933</td><td class="codekolom">1979</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">1934</td><td class="codekolom">1980</td><td class="bredecode"> * _.merge(names, ages);</td></tr><tr><td class="codekolom">1935</td><td class="codekolom">1981</td><td class="bredecode"> * // =&gt; { 'stooges': [{ 'name': 'moe', 'age': 40 }, { 'name': 'larry', 'age': 50 }] }</td></tr><tr><td class="codekolom">1936</td><td class="codekolom">1982</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">1937</td><td class="codekolom">1983</td><td class="bredecode"> * var food = {</td></tr><tr><td class="codekolom">1938</td><td class="codekolom">1984</td><td class="bredecode"> * 'fruits': ['apple'],</td></tr><tr><td class="codekolom">1939</td><td class="codekolom">1985</td><td class="bredecode"> * 'vegetables': ['beet']</td></tr><tr><td class="codekolom">1940</td><td class="codekolom">1986</td><td class="bredecode"> * };</td></tr><tr><td class="codekolom">1941</td><td class="codekolom">1987</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">1942</td><td class="codekolom">1988</td><td class="bredecode"> * var otherFood = {</td></tr><tr><td class="codekolom">1943</td><td class="codekolom">1989</td><td class="bredecode"> * 'fruits': ['banana'],</td></tr><tr><td class="codekolom">1944</td><td class="codekolom">1990</td><td class="bredecode"> * 'vegetables': ['carrot']</td></tr><tr><td class="codekolom">1945</td><td class="codekolom">1991</td><td class="bredecode"> * };</td></tr><tr><td class="codekolom">1946</td><td class="codekolom">1992</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">1947</td><td class="codekolom">1993</td><td class="bredecode"> * _.merge(food, otherFood, function(a, b) {</td></tr><tr><td class="codekolom">1948</td><td class="codekolom">1994</td><td class="bredecode"> * return _.isArray(a) ? a.concat(b) : undefined;</td></tr><tr><td class="codekolom">1949</td><td class="codekolom">1995</td><td class="bredecode"> * });</td></tr><tr><td class="codekolom">1950</td><td class="codekolom">1996</td><td class="bredecode"> * // =&gt; { 'fruits': ['apple', 'banana'], 'vegetables': ['beet', 'carrot] }</td></tr><tr><td class="codekolom">1951</td><td class="codekolom">1997</td><td class="bredecode"> */</td></tr><tr><td class="codekolom">1952</td><td class="codekolom">1998</td><td class="bredecode"> function merge(object, source, deepIndicator) {</td></tr><tr><td class="codekolom">1953</td><td class="codekolom">1999</td><td class="bredecode"> var args = arguments,</td></tr><tr><td class="codekolom">1954</td><td class="codekolom">2000</td><td class="bredecode"> index = 0,</td></tr><tr><td class="codekolom">1955</td><td class="codekolom">2001</td><td class="bredecode"> length = 2;</td></tr><tr><td class="codekolom">1956</td><td class="codekolom">2002</td><td class="bredecode"> </td></tr><tr><td class="codekolom">1957</td><td class="codekolom">2003</td><td class="bredecode"> if (!isObject(object)) {</td></tr><tr><td class="codekolom">1958</td><td class="codekolom">2004</td><td class="bredecode"> return object;</td></tr><tr><td class="codekolom">1959</td><td class="codekolom">2005</td><td class="bredecode"> }</td></tr><tr><td class="codekolom">1960</td><td class="codekolom">2006</td><td class="bredecode"> if (deepIndicator === indicatorObject) {</td></tr><tr><td class="codekolom">1961</td><td class="codekolom">2007</td><td class="bredecode"> var callback = args[3],</td></tr><tr><td class="codekolom">1962</td><td class="codekolom">2008</td><td class="bredecode"> stackA = args[4],</td></tr><tr><td class="codekolom">1963</td><td class="codekolom">2009</td><td class="bredecode"> stackB = args[5];</td></tr><tr><td class="codekolom">1964</td><td class="codekolom">2010</td><td class="bredecode"> } else {</td></tr><tr><td class="codekolom">1965</td><td class="codekolom">2011</td><td class="bredecode"> var initedStack = true;</td></tr><tr><td class="codekolom">1966</td><td class="codekolom">2012</td><td class="bredecode"> stackA = getArray();</td></tr><tr><td class="codekolom">1967</td><td class="codekolom">2013</td><td class="bredecode"> stackB = getArray();</td></tr><tr><td class="codekolom">1968</td><td class="codekolom">2014</td><td class="bredecode"> </td></tr><tr><td class="codekolom">1969</td><td class="codekolom">2015</td><td class="bredecode"> // allows working with `_.reduce` and `_.reduceRight` without</td></tr><tr><td class="codekolom">1970</td><td class="codekolom">2016</td><td class="bredecode"> // using their `callback` arguments, `index|key` and `collection`</td></tr><tr><td class="codekolom">1971</td><td class="codekolom">2017</td><td class="bredecode"> if (typeof deepIndicator != 'number') {</td></tr><tr><td class="codekolom">1972</td><td class="codekolom">2018</td><td class="bredecode"> length = args.length;</td></tr><tr><td class="codekolom">1973</td><td class="codekolom">2019</td><td class="bredecode"> }</td></tr><tr><td class="codekolom">1974</td><td class="codekolom">2020</td><td class="bredecode"> if (length &gt; 3 &amp;&amp; typeof args[length - 2] == 'function') {</td></tr><tr><td class="codekolom">1975</td><td class="codekolom">2021</td><td class="bredecode"> callback = lodash.createCallback(args[--length - 1], args[length--], 2);</td></tr><tr><td class="codekolom">1976</td><td class="codekolom">2022</td><td class="bredecode"> } else if (length &gt; 2 &amp;&amp; typeof args[length - 1] == 'function') {</td></tr><tr><td class="codekolom">1977</td><td class="codekolom">2023</td><td class="bredecode"> callback = args[--length];</td></tr><tr><td class="codekolom">1978</td><td class="codekolom">2024</td><td class="bredecode"> }</td></tr><tr><td class="codekolom">1979</td><td class="codekolom">2025</td><td class="bredecode"> }</td></tr><tr><td class="codekolom">1980</td><td class="codekolom">2026</td><td class="bredecode"> while (++index &lt; length) {</td></tr><tr><td class="codekolom">1981</td><td class="codekolom">2027</td><td class="bredecode"> (isArray(args[index]) ? forEach : forOwn)(args[index], function(source, key) {</td></tr><tr><td class="codekolom">1982</td><td class="codekolom">2028</td><td class="bredecode"> var found,</td></tr><tr><td class="codekolom">1983</td><td class="codekolom">2029</td><td class="bredecode"> isArr,</td></tr><tr><td class="codekolom">1984</td><td class="codekolom">2030</td><td class="bredecode"> result = source,</td></tr><tr><td class="codekolom">1985</td><td class="codekolom">2031</td><td class="bredecode"> value = object[key];</td></tr><tr><td class="codekolom">1986</td><td class="codekolom">2032</td><td class="bredecode"> </td></tr><tr><td class="codekolom">1987</td><td class="codekolom">2033</td><td class="bredecode"> if (source &amp;&amp; ((isArr = isArray(source)) || isPlainObject(source))) {</td></tr><tr><td class="codekolom">1988</td><td class="codekolom">2034</td><td class="bredecode"> // avoid merging previously merged cyclic sources</td></tr><tr><td class="codekolom">1989</td><td class="codekolom">2035</td><td class="bredecode"> var stackLength = stackA.length;</td></tr><tr><td class="codekolom">1990</td><td class="codekolom">2036</td><td class="bredecode"> while (stackLength--) {</td></tr><tr><td class="codekolom">1991</td><td class="codekolom">2037</td><td class="bredecode"> if ((found = stackA[stackLength] == source)) {</td></tr><tr><td class="codekolom">1992</td><td class="codekolom">2038</td><td class="bredecode"> value = stackB[stackLength];</td></tr><tr><td class="codekolom">1993</td><td class="codekolom">2039</td><td class="bredecode"> break;</td></tr><tr><td class="codekolom">1994</td><td class="codekolom">2040</td><td class="bredecode"> }</td></tr><tr><td class="codekolom">1995</td><td class="codekolom">2041</td><td class="bredecode"> }</td></tr><tr><td class="codekolom">1996</td><td class="codekolom">2042</td><td class="bredecode"> if (!found) {</td></tr><tr><td class="codekolom">1997</td><td class="codekolom">2043</td><td class="bredecode"> var isShallow;</td></tr><tr><td class="codekolom">1998</td><td class="codekolom">2044</td><td class="bredecode"> if (callback) {</td></tr><tr><td class="codekolom">1999</td><td class="codekolom">2045</td><td class="bredecode"> result = callback(value, source);</td></tr><tr><td class="codekolom">2000</td><td class="codekolom">2046</td><td class="bredecode"> if ((isShallow = typeof result != 'undefined')) {</td></tr><tr><td class="codekolom">2001</td><td class="codekolom">2047</td><td class="bredecode"> value = result;</td></tr><tr><td class="codekolom">2002</td><td class="codekolom">2048</td><td class="bredecode"> }</td></tr><tr><td class="codekolom">2003</td><td class="codekolom">2049</td><td class="bredecode"> }</td></tr><tr><td class="codekolom">2004</td><td class="codekolom">2050</td><td class="bredecode"> if (!isShallow) {</td></tr><tr><td class="codekolom">2005</td><td class="codekolom">2051</td><td class="bredecode"> value = isArr</td></tr><tr><td class="codekolom">2006</td><td class="codekolom">2052</td><td class="bredecode"> ? (isArray(value) ? value : [])</td></tr><tr><td class="codekolom">2007</td><td class="codekolom">2053</td><td class="bredecode"> : (isPlainObject(value) ? value : {});</td></tr><tr><td class="codekolom">2008</td><td class="codekolom">2054</td><td class="bredecode"> }</td></tr><tr><td class="codekolom">2009</td><td class="codekolom">2055</td><td class="bredecode"> // add `source` and associated `value` to the stack of traversed objects</td></tr><tr><td class="codekolom">2010</td><td class="codekolom">2056</td><td class="bredecode"> stackA.push(source);</td></tr><tr><td class="codekolom">2011</td><td class="codekolom">2057</td><td class="bredecode"> stackB.push(value);</td></tr><tr><td class="codekolom">2012</td><td class="codekolom">2058</td><td class="bredecode"> </td></tr><tr><td class="codekolom">2013</td><td class="codekolom">2059</td><td class="bredecode"> // recursively merge objects and arrays (susceptible to call stack limits)</td></tr><tr><td class="codekolom">2014</td><td class="codekolom">2060</td><td class="bredecode"> if (!isShallow) {</td></tr><tr><td class="codekolom">2015</td><td class="codekolom">2061</td><td class="bredecode"> value = merge(value, source, indicatorObject, callback, stackA, stackB);</td></tr><tr><td class="codekolom">2016</td><td class="codekolom">2062</td><td class="bredecode"> }</td></tr><tr><td class="codekolom">2017</td><td class="codekolom">2063</td><td class="bredecode"> }</td></tr><tr><td class="codekolom">2018</td><td class="codekolom">2064</td><td class="bredecode"> }</td></tr><tr><td class="codekolom">2019</td><td class="codekolom">2065</td><td class="bredecode"> else {</td></tr><tr><td class="codekolom">2020</td><td class="codekolom">2066</td><td class="bredecode"> if (callback) {</td></tr><tr><td class="codekolom">2021</td><td class="codekolom">2067</td><td class="bredecode"> result = callback(value, source);</td></tr><tr><td class="codekolom">2022</td><td class="codekolom">2068</td><td class="bredecode"> if (typeof result == 'undefined') {</td></tr><tr><td class="codekolom">2023</td><td class="codekolom">2069</td><td class="bredecode"> result = source;</td></tr><tr><td class="codekolom">2024</td><td class="codekolom">2070</td><td class="bredecode"> }</td></tr><tr><td class="codekolom">2025</td><td class="codekolom">2071</td><td class="bredecode"> }</td></tr><tr><td class="codekolom">2026</td><td class="codekolom">2072</td><td class="bredecode"> if (typeof result != 'undefined') {</td></tr><tr><td class="codekolom">2027</td><td class="codekolom">2073</td><td class="bredecode"> value = result;</td></tr><tr><td class="codekolom">2028</td><td class="codekolom">2074</td><td class="bredecode"> }</td></tr><tr><td class="codekolom">2029</td><td class="codekolom">2075</td><td class="bredecode"> }</td></tr><tr><td class="codekolom">2030</td><td class="codekolom">2076</td><td class="bredecode"> object[key] = value;</td></tr><tr><td class="codekolom">2031</td><td class="codekolom">2077</td><td class="bredecode"> });</td></tr><tr><td class="codekolom">2032</td><td class="codekolom">2078</td><td class="bredecode"> }</td></tr><tr><td class="codekolom">2033</td><td class="codekolom">2079</td><td class="bredecode"> </td></tr><tr><td class="codekolom">2034</td><td class="codekolom">2080</td><td class="bredecode"> if (initedStack) {</td></tr><tr><td class="codekolom">2035</td><td class="codekolom">2081</td><td class="bredecode"> releaseArray(stackA);</td></tr><tr><td class="codekolom">2036</td><td class="codekolom">2082</td><td class="bredecode"> releaseArray(stackB);</td></tr><tr><td class="codekolom">2037</td><td class="codekolom">2083</td><td class="bredecode"> }</td></tr><tr><td class="codekolom">2038</td><td class="codekolom">2084</td><td class="bredecode"> return object;</td></tr><tr><td class="codekolom">2039</td><td class="codekolom">2085</td><td class="bredecode"> }</td></tr><tr><td class="codekolom">2040</td><td class="codekolom">2086</td><td class="bredecode"> </td></tr><tr><td class="codekolom">2041</td><td class="codekolom">2087</td><td class="bredecode"> /**</td></tr><tr><td class="codekolom">2042</td><td class="codekolom">2088</td><td class="bredecode"> * Creates a shallow clone of `object` excluding the specified properties.</td></tr><tr><td class="codekolom">2043</td><td class="codekolom">2089</td><td class="bredecode"> * Property names may be specified as individual arguments or as arrays of</td></tr><tr><td class="codekolom">2044</td><td class="codekolom">2090</td><td class="bredecode"> * property names. If a `callback` function is passed, it will be executed</td></tr><tr><td class="codekolom">2045</td><td class="codekolom">2091</td><td class="bredecode"> * for each property in the `object`, omitting the properties `callback`</td></tr><tr><td class="codekolom">2046</td><td class="codekolom">2092</td><td class="bredecode"> * returns truthy for. The `callback` is bound to `thisArg` and invoked</td></tr><tr><td class="codekolom">2047</td><td class="codekolom">2093</td><td class="bredecode"> * with three arguments; (value, key, object).</td></tr><tr><td class="codekolom">2048</td><td class="codekolom">2094</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">2049</td><td class="codekolom">2095</td><td class="bredecode"> * @static</td></tr><tr><td class="codekolom">2050</td><td class="codekolom">2096</td><td class="bredecode"> * @memberOf _</td></tr><tr><td class="codekolom">2051</td><td class="codekolom">2097</td><td class="bredecode"> * @category Objects</td></tr><tr><td class="codekolom">2052</td><td class="codekolom">2098</td><td class="bredecode"> * @param {Object} object The source object.</td></tr><tr><td class="codekolom">2053</td><td class="codekolom">2099</td><td class="bredecode"> * @param {Function|String} callback|[prop1, prop2, ...] The properties to omit</td></tr><tr><td class="codekolom">2054</td><td class="codekolom">2100</td><td class="bredecode"> * or the function called per iteration.</td></tr><tr><td class="codekolom">2055</td><td class="codekolom">2101</td><td class="bredecode"> * @param {Mixed} [thisArg] The `this` binding of `callback`.</td></tr><tr><td class="codekolom">2056</td><td class="codekolom">2102</td><td class="bredecode"> * @returns {Object} Returns an object without the omitted properties.</td></tr><tr><td class="codekolom">2057</td><td class="codekolom">2103</td><td class="bredecode"> * @example</td></tr><tr><td class="codekolom">2058</td><td class="codekolom">2104</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">2059</td><td class="codekolom">2105</td><td class="bredecode"> * _.omit({ 'name': 'moe', 'age': 40 }, 'age');</td></tr><tr><td class="codekolom">2060</td><td class="codekolom">2106</td><td class="bredecode"> * // =&gt; { 'name': 'moe' }</td></tr><tr><td class="codekolom">2061</td><td class="codekolom">2107</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">2062</td><td class="codekolom">2108</td><td class="bredecode"> * _.omit({ 'name': 'moe', 'age': 40 }, function(value) {</td></tr><tr><td class="codekolom">2063</td><td class="codekolom">2109</td><td class="bredecode"> * return typeof value == 'number';</td></tr><tr><td class="codekolom">2064</td><td class="codekolom">2110</td><td class="bredecode"> * });</td></tr><tr><td class="codekolom">2065</td><td class="codekolom">2111</td><td class="bredecode"> * // =&gt; { 'name': 'moe' }</td></tr><tr><td class="codekolom">2066</td><td class="codekolom">2112</td><td class="bredecode"> */</td></tr><tr><td class="codekolom">2067</td><td class="codekolom">2113</td><td class="bredecode"> function omit(object, callback, thisArg) {</td></tr><tr><td class="codekolom">2068</td><td class="codekolom">2114</td><td class="bredecode"> var indexOf = getIndexOf(),</td></tr><tr><td class="codekolom">2069</td><td class="codekolom">2115</td><td class="bredecode"> isFunc = typeof callback == 'function',</td></tr><tr><td class="codekolom">2070</td><td class="codekolom">2116</td><td class="bredecode"> result = {};</td></tr><tr><td class="codekolom">2071</td><td class="codekolom">2117</td><td class="bredecode"> </td></tr><tr><td class="codekolom">2072</td><td class="codekolom">2118</td><td class="bredecode"> if (isFunc) {</td></tr><tr><td class="codekolom">2073</td><td class="codekolom">2119</td><td class="bredecode"> callback = lodash.createCallback(callback, thisArg);</td></tr><tr><td class="codekolom">2074</td><td class="codekolom">2120</td><td class="bredecode"> } else {</td></tr><tr><td class="codekolom">2075</td><td class="codekolom">2121</td><td class="bredecode"> var props = concat.apply(arrayRef, nativeSlice.call(arguments, 1));</td></tr><tr><td class="codekolom">2076</td><td class="codekolom">2122</td><td class="bredecode"> }</td></tr><tr><td class="codekolom">2077</td><td class="codekolom">2123</td><td class="bredecode"> forIn(object, function(value, key, object) {</td></tr><tr><td class="codekolom">2078</td><td class="codekolom">2124</td><td class="bredecode"> if (isFunc</td></tr><tr><td class="codekolom">2079</td><td class="codekolom">2125</td><td class="bredecode"> ? !callback(value, key, object)</td></tr><tr><td class="codekolom">2080</td><td class="codekolom">2126</td><td class="bredecode"> : indexOf(props, key) &lt; 0</td></tr><tr><td class="codekolom">2081</td><td class="codekolom">2127</td><td class="bredecode"> ) {</td></tr><tr><td class="codekolom">2082</td><td class="codekolom">2128</td><td class="bredecode"> result[key] = value;</td></tr><tr><td class="codekolom">2083</td><td class="codekolom">2129</td><td class="bredecode"> }</td></tr><tr><td class="codekolom">2084</td><td class="codekolom">2130</td><td class="bredecode"> });</td></tr><tr><td class="codekolom">2085</td><td class="codekolom">2131</td><td class="bredecode"> return result;</td></tr><tr><td class="codekolom">2086</td><td class="codekolom">2132</td><td class="bredecode"> }</td></tr><tr><td class="codekolom">2087</td><td class="codekolom">2133</td><td class="bredecode"> </td></tr><tr><td class="codekolom">2088</td><td class="codekolom">2134</td><td class="bredecode"> /**</td></tr><tr><td class="codekolom">2089</td><td class="codekolom">2135</td><td class="bredecode"> * Creates a two dimensional array of the given object's key-value pairs,</td></tr><tr><td class="codekolom">2090</td><td class="codekolom">2136</td><td class="bredecode"> * i.e. `[[key1, value1], [key2, value2]]`.</td></tr><tr><td class="codekolom">2091</td><td class="codekolom">2137</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">2092</td><td class="codekolom">2138</td><td class="bredecode"> * @static</td></tr><tr><td class="codekolom">2093</td><td class="codekolom">2139</td><td class="bredecode"> * @memberOf _</td></tr><tr><td class="codekolom">2094</td><td class="codekolom">2140</td><td class="bredecode"> * @category Objects</td></tr><tr><td class="codekolom">2095</td><td class="codekolom">2141</td><td class="bredecode"> * @param {Object} object The object to inspect.</td></tr><tr><td class="codekolom">2096</td><td class="codekolom">2142</td><td class="bredecode"> * @returns {Array} Returns new array of key-value pairs.</td></tr><tr><td class="codekolom">2097</td><td class="codekolom">2143</td><td class="bredecode"> * @example</td></tr><tr><td class="codekolom">2098</td><td class="codekolom">2144</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">2099</td><td class="codekolom">2145</td><td class="bredecode"> * _.pairs({ 'moe': 30, 'larry': 40 });</td></tr><tr><td class="codekolom">2100</td><td class="codekolom">2146</td><td class="bredecode"> * // =&gt; [['moe', 30], ['larry', 40]] (order is not guaranteed)</td></tr><tr><td class="codekolom">2101</td><td class="codekolom">2147</td><td class="bredecode"> */</td></tr><tr><td class="codekolom">2102</td><td class="codekolom">2148</td><td class="bredecode"> function pairs(object) {</td></tr><tr><td class="codekolom">2103</td><td class="codekolom">2149</td><td class="bredecode"> var index = -1,</td></tr><tr><td class="codekolom">2104</td><td class="codekolom">2150</td><td class="bredecode"> props = keys(object),</td></tr><tr><td class="codekolom">2105</td><td class="codekolom">2151</td><td class="bredecode"> length = props.length,</td></tr><tr><td class="codekolom">2106</td><td class="codekolom">2152</td><td class="bredecode"> result = Array(length);</td></tr><tr><td class="codekolom">2107</td><td class="codekolom">2153</td><td class="bredecode"> </td></tr><tr><td class="codekolom">2108</td><td class="codekolom">2154</td><td class="bredecode"> while (++index &lt; length) {</td></tr><tr><td class="codekolom">2109</td><td class="codekolom">2155</td><td class="bredecode"> var key = props[index];</td></tr><tr><td class="codekolom">2110</td><td class="codekolom">2156</td><td class="bredecode"> result[index] = [key, object[key]];</td></tr><tr><td class="codekolom">2111</td><td class="codekolom">2157</td><td class="bredecode"> }</td></tr><tr><td class="codekolom">2112</td><td class="codekolom">2158</td><td class="bredecode"> return result;</td></tr><tr><td class="codekolom">2113</td><td class="codekolom">2159</td><td class="bredecode"> }</td></tr><tr><td class="codekolom">2114</td><td class="codekolom">2160</td><td class="bredecode"> </td></tr><tr><td class="codekolom">2115</td><td class="codekolom">2161</td><td class="bredecode"> /**</td></tr><tr><td class="codekolom">2116</td><td class="codekolom">2162</td><td class="bredecode"> * Creates a shallow clone of `object` composed of the specified properties.</td></tr><tr><td class="codekolom">2117</td><td class="codekolom">2163</td><td class="bredecode"> * Property names may be specified as individual arguments or as arrays of property</td></tr><tr><td class="codekolom">2118</td><td class="codekolom">2164</td><td class="bredecode"> * names. If `callback` is passed, it will be executed for each property in the</td></tr><tr><td class="codekolom">2119</td><td class="codekolom">2165</td><td class="bredecode"> * `object`, picking the properties `callback` returns truthy for. The `callback`</td></tr><tr><td class="codekolom">2120</td><td class="codekolom">2166</td><td class="bredecode"> * is bound to `thisArg` and invoked with three arguments; (value, key, object).</td></tr><tr><td class="codekolom">2121</td><td class="codekolom">2167</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">2122</td><td class="codekolom">2168</td><td class="bredecode"> * @static</td></tr><tr><td class="codekolom">2123</td><td class="codekolom">2169</td><td class="bredecode"> * @memberOf _</td></tr><tr><td class="codekolom">2124</td><td class="codekolom">2170</td><td class="bredecode"> * @category Objects</td></tr><tr><td class="codekolom">2125</td><td class="codekolom">2171</td><td class="bredecode"> * @param {Object} object The source object.</td></tr><tr><td class="codekolom">2126</td><td class="codekolom">2172</td><td class="bredecode"> * @param {Array|Function|String} callback|[prop1, prop2, ...] The function called</td></tr><tr><td class="codekolom">2127</td><td class="codekolom">2173</td><td class="bredecode"> * per iteration or properties to pick, either as individual arguments or arrays.</td></tr><tr><td class="codekolom">2128</td><td class="codekolom">2174</td><td class="bredecode"> * @param {Mixed} [thisArg] The `this` binding of `callback`.</td></tr><tr><td class="codekolom">2129</td><td class="codekolom">2175</td><td class="bredecode"> * @returns {Object} Returns an object composed of the picked properties.</td></tr><tr><td class="codekolom">2130</td><td class="codekolom">2176</td><td class="bredecode"> * @example</td></tr><tr><td class="codekolom">2131</td><td class="codekolom">2177</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">2132</td><td class="codekolom">2178</td><td class="bredecode"> * _.pick({ 'name': 'moe', '_userid': 'moe1' }, 'name');</td></tr><tr><td class="codekolom">2133</td><td class="codekolom">2179</td><td class="bredecode"> * // =&gt; { 'name': 'moe' }</td></tr><tr><td class="codekolom">2134</td><td class="codekolom">2180</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">2135</td><td class="codekolom">2181</td><td class="bredecode"> * _.pick({ 'name': 'moe', '_userid': 'moe1' }, function(value, key) {</td></tr><tr><td class="codekolom">2136</td><td class="codekolom">2182</td><td class="bredecode"> * return key.charAt(0) != '_';</td></tr><tr><td class="codekolom">2137</td><td class="codekolom">2183</td><td class="bredecode"> * });</td></tr><tr><td class="codekolom">2138</td><td class="codekolom">2184</td><td class="bredecode"> * // =&gt; { 'name': 'moe' }</td></tr><tr><td class="codekolom">2139</td><td class="codekolom">2185</td><td class="bredecode"> */</td></tr><tr class="del"><td class="codekolom">2140</td><td class="codekolom"></td><td class="bredecode">- function pick(object, callback, thisArg) {</td></tr><tr class="add"><td class="codekolom"></td><td class="codekolom">2186</td><td class="bredecode">+ var pick = function pick(callback, object, thisArg) {</td></tr><tr><td class="codekolom">2141</td><td class="codekolom">2187</td><td class="bredecode"> var result = {};</td></tr><tr><td class="codekolom">2142</td><td class="codekolom">2188</td><td class="bredecode"> if (typeof callback != 'function') {</td></tr><tr><td class="codekolom">2143</td><td class="codekolom">2189</td><td class="bredecode"> var index = -1,</td></tr><tr><td class="codekolom">2144</td><td class="codekolom">2190</td><td class="bredecode"> props = concat.apply(arrayRef, nativeSlice.call(arguments, 1)),</td></tr><tr><td class="codekolom">2145</td><td class="codekolom">2191</td><td class="bredecode"> length = isObject(object) ? props.length : 0;</td></tr><tr><td class="codekolom">2146</td><td class="codekolom">2192</td><td class="bredecode"> </td></tr><tr><td class="codekolom">2147</td><td class="codekolom">2193</td><td class="bredecode"> while (++index &lt; length) {</td></tr><tr><td class="codekolom">2148</td><td class="codekolom">2194</td><td class="bredecode"> var key = props[index];</td></tr><tr><td class="codekolom">2149</td><td class="codekolom">2195</td><td class="bredecode"> if (key in object) {</td></tr><tr><td class="codekolom">2150</td><td class="codekolom">2196</td><td class="bredecode"> result[key] = object[key];</td></tr><tr><td class="codekolom">2151</td><td class="codekolom">2197</td><td class="bredecode"> }</td></tr><tr><td class="codekolom">2152</td><td class="codekolom">2198</td><td class="bredecode"> }</td></tr><tr><td class="codekolom">2153</td><td class="codekolom">2199</td><td class="bredecode"> } else {</td></tr><tr><td class="codekolom">2154</td><td class="codekolom">2200</td><td class="bredecode"> callback = lodash.createCallback(callback, thisArg);</td></tr><tr><td class="codekolom">2155</td><td class="codekolom">2201</td><td class="bredecode"> forIn(object, function(value, key, object) {</td></tr><tr><td class="codekolom">2156</td><td class="codekolom">2202</td><td class="bredecode"> if (callback(value, key, object)) {</td></tr><tr><td class="codekolom">2157</td><td class="codekolom">2203</td><td class="bredecode"> result[key] = value;</td></tr><tr><td class="codekolom">2158</td><td class="codekolom">2204</td><td class="bredecode"> }</td></tr><tr><td class="codekolom">2159</td><td class="codekolom">2205</td><td class="bredecode"> });</td></tr><tr><td class="codekolom">2160</td><td class="codekolom">2206</td><td class="bredecode"> }</td></tr><tr><td class="codekolom">2161</td><td class="codekolom">2207</td><td class="bredecode"> return result;</td></tr><tr class="del"><td class="codekolom">2162</td><td class="codekolom"></td><td class="bredecode">- }</td></tr><tr class="add"><td class="codekolom"></td><td class="codekolom">2208</td><td class="bredecode">+ }.autoCurry(2);</td></tr><tr><td class="codekolom">2163</td><td class="codekolom">2209</td><td class="bredecode"> </td></tr><tr><td class="codekolom">2164</td><td class="codekolom">2210</td><td class="bredecode"> /**</td></tr><tr><td class="codekolom">2165</td><td class="codekolom">2211</td><td class="bredecode"> * An alternative to `_.reduce`, this method transforms an `object` to a new</td></tr><tr><td class="codekolom">2166</td><td class="codekolom">2212</td><td class="bredecode"> * `accumulator` object which is the result of running each of its elements</td></tr><tr><td class="codekolom">2167</td><td class="codekolom">2213</td><td class="bredecode"> * through the `callback`, with each `callback` execution potentially mutating</td></tr><tr><td class="codekolom">2168</td><td class="codekolom">2214</td><td class="bredecode"> * the `accumulator` object. The `callback` is bound to `thisArg` and invoked</td></tr><tr><td class="codekolom">2169</td><td class="codekolom">2215</td><td class="bredecode"> * with four arguments; (accumulator, value, key, object). Callbacks may exit</td></tr><tr><td class="codekolom">2170</td><td class="codekolom">2216</td><td class="bredecode"> * iteration early by explicitly returning `false`.</td></tr><tr><td class="codekolom">2171</td><td class="codekolom">2217</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">2172</td><td class="codekolom">2218</td><td class="bredecode"> * @static</td></tr><tr><td class="codekolom">2173</td><td class="codekolom">2219</td><td class="bredecode"> * @memberOf _</td></tr><tr><td class="codekolom">2174</td><td class="codekolom">2220</td><td class="bredecode"> * @category Objects</td></tr><tr><td class="codekolom">2175</td><td class="codekolom">2221</td><td class="bredecode"> * @param {Array|Object} collection The collection to iterate over.</td></tr><tr><td class="codekolom">2176</td><td class="codekolom">2222</td><td class="bredecode"> * @param {Function} [callback=identity] The function called per iteration.</td></tr><tr><td class="codekolom">2177</td><td class="codekolom">2223</td><td class="bredecode"> * @param {Mixed} [accumulator] The custom accumulator value.</td></tr><tr><td class="codekolom">2178</td><td class="codekolom">2224</td><td class="bredecode"> * @param {Mixed} [thisArg] The `this` binding of `callback`.</td></tr><tr><td class="codekolom">2179</td><td class="codekolom">2225</td><td class="bredecode"> * @returns {Mixed} Returns the accumulated value.</td></tr><tr><td class="codekolom">2180</td><td class="codekolom">2226</td><td class="bredecode"> * @example</td></tr><tr><td class="codekolom">2181</td><td class="codekolom">2227</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">2182</td><td class="codekolom">2228</td><td class="bredecode"> * var squares = _.transform([1, 2, 3, 4, 5, 6, 7, 8, 9, 10], function(result, num) {</td></tr><tr><td class="codekolom">2183</td><td class="codekolom">2229</td><td class="bredecode"> * num *= num;</td></tr><tr><td class="codekolom">2184</td><td class="codekolom">2230</td><td class="bredecode"> * if (num % 2) {</td></tr><tr><td class="codekolom">2185</td><td class="codekolom">2231</td><td class="bredecode"> * return result.push(num) &lt; 3;</td></tr><tr><td class="codekolom">2186</td><td class="codekolom">2232</td><td class="bredecode"> * }</td></tr><tr><td class="codekolom">2187</td><td class="codekolom">2233</td><td class="bredecode"> * });</td></tr><tr><td class="codekolom">2188</td><td class="codekolom">2234</td><td class="bredecode"> * // =&gt; [1, 9, 25]</td></tr><tr><td class="codekolom">2189</td><td class="codekolom">2235</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">2190</td><td class="codekolom">2236</td><td class="bredecode"> * var mapped = _.transform({ 'a': 1, 'b': 2, 'c': 3 }, function(result, num, key) {</td></tr><tr><td class="codekolom">2191</td><td class="codekolom">2237</td><td class="bredecode"> * result[key] = num * 3;</td></tr><tr><td class="codekolom">2192</td><td class="codekolom">2238</td><td class="bredecode"> * });</td></tr><tr><td class="codekolom">2193</td><td class="codekolom">2239</td><td class="bredecode"> * // =&gt; { 'a': 3, 'b': 6, 'c': 9 }</td></tr><tr><td class="codekolom">2194</td><td class="codekolom">2240</td><td class="bredecode"> */</td></tr><tr><td class="codekolom">2195</td><td class="codekolom">2241</td><td class="bredecode"> function transform(object, callback, accumulator, thisArg) {</td></tr><tr><td class="codekolom">2196</td><td class="codekolom">2242</td><td class="bredecode"> var isArr = isArray(object);</td></tr><tr><td class="codekolom">2197</td><td class="codekolom">2243</td><td class="bredecode"> callback = lodash.createCallback(callback, thisArg, 4);</td></tr><tr><td class="codekolom">2198</td><td class="codekolom">2244</td><td class="bredecode"> </td></tr><tr><td class="codekolom">2199</td><td class="codekolom">2245</td><td class="bredecode"> if (accumulator == null) {</td></tr><tr><td class="codekolom">2200</td><td class="codekolom">2246</td><td class="bredecode"> if (isArr) {</td></tr><tr><td class="codekolom">2201</td><td class="codekolom">2247</td><td class="bredecode"> accumulator = [];</td></tr><tr><td class="codekolom">2202</td><td class="codekolom">2248</td><td class="bredecode"> } else {</td></tr><tr><td class="codekolom">2203</td><td class="codekolom">2249</td><td class="bredecode"> var ctor = object &amp;&amp; object.constructor,</td></tr><tr><td class="codekolom">2204</td><td class="codekolom">2250</td><td class="bredecode"> proto = ctor &amp;&amp; ctor.prototype;</td></tr><tr><td class="codekolom">2205</td><td class="codekolom">2251</td><td class="bredecode"> </td></tr><tr><td class="codekolom">2206</td><td class="codekolom">2252</td><td class="bredecode"> accumulator = createObject(proto);</td></tr><tr><td class="codekolom">2207</td><td class="codekolom">2253</td><td class="bredecode"> }</td></tr><tr><td class="codekolom">2208</td><td class="codekolom">2254</td><td class="bredecode"> }</td></tr><tr><td class="codekolom">2209</td><td class="codekolom">2255</td><td class="bredecode"> (isArr ? forEach : forOwn)(object, function(value, index, object) {</td></tr><tr><td class="codekolom">2210</td><td class="codekolom">2256</td><td class="bredecode"> return callback(accumulator, value, index, object);</td></tr><tr><td class="codekolom">2211</td><td class="codekolom">2257</td><td class="bredecode"> });</td></tr><tr><td class="codekolom">2212</td><td class="codekolom">2258</td><td class="bredecode"> return accumulator;</td></tr><tr><td class="codekolom">2213</td><td class="codekolom">2259</td><td class="bredecode"> }</td></tr><tr><td class="codekolom">2214</td><td class="codekolom">2260</td><td class="bredecode"> </td></tr><tr><td class="codekolom">2215</td><td class="codekolom">2261</td><td class="bredecode"> /**</td></tr><tr><td class="codekolom">2216</td><td class="codekolom">2262</td><td class="bredecode"> * Creates an array composed of the own enumerable property values of `object`.</td></tr><tr><td class="codekolom">2217</td><td class="codekolom">2263</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">2218</td><td class="codekolom">2264</td><td class="bredecode"> * @static</td></tr><tr><td class="codekolom">2219</td><td class="codekolom">2265</td><td class="bredecode"> * @memberOf _</td></tr><tr><td class="codekolom">2220</td><td class="codekolom">2266</td><td class="bredecode"> * @category Objects</td></tr><tr><td class="codekolom">2221</td><td class="codekolom">2267</td><td class="bredecode"> * @param {Object} object The object to inspect.</td></tr><tr><td class="codekolom">2222</td><td class="codekolom">2268</td><td class="bredecode"> * @returns {Array} Returns a new array of property values.</td></tr><tr><td class="codekolom">2223</td><td class="codekolom">2269</td><td class="bredecode"> * @example</td></tr><tr><td class="codekolom">2224</td><td class="codekolom">2270</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">2225</td><td class="codekolom">2271</td><td class="bredecode"> * _.values({ 'one': 1, 'two': 2, 'three': 3 });</td></tr><tr><td class="codekolom">2226</td><td class="codekolom">2272</td><td class="bredecode"> * // =&gt; [1, 2, 3] (order is not guaranteed)</td></tr><tr><td class="codekolom">2227</td><td class="codekolom">2273</td><td class="bredecode"> */</td></tr><tr><td class="codekolom">2228</td><td class="codekolom">2274</td><td class="bredecode"> function values(object) {</td></tr><tr><td class="codekolom">2229</td><td class="codekolom">2275</td><td class="bredecode"> var index = -1,</td></tr><tr><td class="codekolom">2230</td><td class="codekolom">2276</td><td class="bredecode"> props = keys(object),</td></tr><tr><td class="codekolom">2231</td><td class="codekolom">2277</td><td class="bredecode"> length = props.length,</td></tr><tr><td class="codekolom">2232</td><td class="codekolom">2278</td><td class="bredecode"> result = Array(length);</td></tr><tr><td class="codekolom">2233</td><td class="codekolom">2279</td><td class="bredecode"> </td></tr><tr><td class="codekolom">2234</td><td class="codekolom">2280</td><td class="bredecode"> while (++index &lt; length) {</td></tr><tr><td class="codekolom">2235</td><td class="codekolom">2281</td><td class="bredecode"> result[index] = object[props[index]];</td></tr><tr><td class="codekolom">2236</td><td class="codekolom">2282</td><td class="bredecode"> }</td></tr><tr><td class="codekolom">2237</td><td class="codekolom">2283</td><td class="bredecode"> return result;</td></tr><tr><td class="codekolom">2238</td><td class="codekolom">2284</td><td class="bredecode"> }</td></tr><tr><td class="codekolom">2239</td><td class="codekolom">2285</td><td class="bredecode"> </td></tr><tr><td class="codekolom">2240</td><td class="codekolom">2286</td><td class="bredecode"> /*--------------------------------------------------------------------------*/</td></tr><tr><td class="codekolom">2241</td><td class="codekolom">2287</td><td class="bredecode"> </td></tr><tr><td class="codekolom">2242</td><td class="codekolom">2288</td><td class="bredecode"> /**</td></tr><tr><td class="codekolom">2243</td><td class="codekolom">2289</td><td class="bredecode"> * Creates an array of elements from the specified indexes, or keys, of the</td></tr><tr><td class="codekolom">2244</td><td class="codekolom">2290</td><td class="bredecode"> * `collection`. Indexes may be specified as individual arguments or as arrays</td></tr><tr><td class="codekolom">2245</td><td class="codekolom">2291</td><td class="bredecode"> * of indexes.</td></tr><tr><td class="codekolom">2246</td><td class="codekolom">2292</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">2247</td><td class="codekolom">2293</td><td class="bredecode"> * @static</td></tr><tr><td class="codekolom">2248</td><td class="codekolom">2294</td><td class="bredecode"> * @memberOf _</td></tr><tr><td class="codekolom">2249</td><td class="codekolom">2295</td><td class="bredecode"> * @category Collections</td></tr><tr><td class="codekolom">2250</td><td class="codekolom">2296</td><td class="bredecode"> * @param {Array|Object|String} collection The collection to iterate over.</td></tr><tr><td class="codekolom">2251</td><td class="codekolom">2297</td><td class="bredecode"> * @param {Array|Number|String} [index1, index2, ...] The indexes of</td></tr><tr><td class="codekolom">2252</td><td class="codekolom">2298</td><td class="bredecode"> * `collection` to retrieve, either as individual arguments or arrays.</td></tr><tr><td class="codekolom">2253</td><td class="codekolom">2299</td><td class="bredecode"> * @returns {Array} Returns a new array of elements corresponding to the</td></tr><tr><td class="codekolom">2254</td><td class="codekolom">2300</td><td class="bredecode"> * provided indexes.</td></tr><tr><td class="codekolom">2255</td><td class="codekolom">2301</td><td class="bredecode"> * @example</td></tr><tr><td class="codekolom">2256</td><td class="codekolom">2302</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">2257</td><td class="codekolom">2303</td><td class="bredecode"> * _.at(['a', 'b', 'c', 'd', 'e'], [0, 2, 4]);</td></tr><tr><td class="codekolom">2258</td><td class="codekolom">2304</td><td class="bredecode"> * // =&gt; ['a', 'c', 'e']</td></tr><tr><td class="codekolom">2259</td><td class="codekolom">2305</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">2260</td><td class="codekolom">2306</td><td class="bredecode"> * _.at(['moe', 'larry', 'curly'], 0, 2);</td></tr><tr><td class="codekolom">2261</td><td class="codekolom">2307</td><td class="bredecode"> * // =&gt; ['moe', 'curly']</td></tr><tr><td class="codekolom">2262</td><td class="codekolom">2308</td><td class="bredecode"> */</td></tr><tr><td class="codekolom">2263</td><td class="codekolom">2309</td><td class="bredecode"> function at(collection) {</td></tr><tr><td class="codekolom">2264</td><td class="codekolom">2310</td><td class="bredecode"> var index = -1,</td></tr><tr><td class="codekolom">2265</td><td class="codekolom">2311</td><td class="bredecode"> props = concat.apply(arrayRef, nativeSlice.call(arguments, 1)),</td></tr><tr><td class="codekolom">2266</td><td class="codekolom">2312</td><td class="bredecode"> length = props.length,</td></tr><tr><td class="codekolom">2267</td><td class="codekolom">2313</td><td class="bredecode"> result = Array(length);</td></tr><tr><td class="codekolom">2268</td><td class="codekolom">2314</td><td class="bredecode"> </td></tr><tr><td class="codekolom">2269</td><td class="codekolom">2315</td><td class="bredecode"> while(++index &lt; length) {</td></tr><tr><td class="codekolom">2270</td><td class="codekolom">2316</td><td class="bredecode"> result[index] = collection[props[index]];</td></tr><tr><td class="codekolom">2271</td><td class="codekolom">2317</td><td class="bredecode"> }</td></tr><tr><td class="codekolom">2272</td><td class="codekolom">2318</td><td class="bredecode"> return result;</td></tr><tr><td class="codekolom">2273</td><td class="codekolom">2319</td><td class="bredecode"> }</td></tr><tr><td class="codekolom">2274</td><td class="codekolom">2320</td><td class="bredecode"> </td></tr><tr><td class="codekolom">2275</td><td class="codekolom">2321</td><td class="bredecode"> /**</td></tr><tr><td class="codekolom">2276</td><td class="codekolom">2322</td><td class="bredecode"> * Checks if a given `target` element is present in a `collection` using strict</td></tr><tr><td class="codekolom">2277</td><td class="codekolom">2323</td><td class="bredecode"> * equality for comparisons, i.e. `===`. If `fromIndex` is negative, it is used</td></tr><tr><td class="codekolom">2278</td><td class="codekolom">2324</td><td class="bredecode"> * as the offset from the end of the collection.</td></tr><tr><td class="codekolom">2279</td><td class="codekolom">2325</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">2280</td><td class="codekolom">2326</td><td class="bredecode"> * @static</td></tr><tr><td class="codekolom">2281</td><td class="codekolom">2327</td><td class="bredecode"> * @memberOf _</td></tr><tr><td class="codekolom">2282</td><td class="codekolom">2328</td><td class="bredecode"> * @alias include</td></tr><tr><td class="codekolom">2283</td><td class="codekolom">2329</td><td class="bredecode"> * @category Collections</td></tr><tr><td class="codekolom">2284</td><td class="codekolom">2330</td><td class="bredecode"> * @param {Array|Object|String} collection The collection to iterate over.</td></tr><tr><td class="codekolom">2285</td><td class="codekolom">2331</td><td class="bredecode"> * @param {Mixed} target The value to check for.</td></tr><tr><td class="codekolom">2286</td><td class="codekolom">2332</td><td class="bredecode"> * @param {Number} [fromIndex=0] The index to search from.</td></tr><tr><td class="codekolom">2287</td><td class="codekolom">2333</td><td class="bredecode"> * @returns {Boolean} Returns `true` if the `target` element is found, else `false`.</td></tr><tr><td class="codekolom">2288</td><td class="codekolom">2334</td><td class="bredecode"> * @example</td></tr><tr><td class="codekolom">2289</td><td class="codekolom">2335</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">2290</td><td class="codekolom">2336</td><td class="bredecode"> * _.contains([1, 2, 3], 1);</td></tr><tr><td class="codekolom">2291</td><td class="codekolom">2337</td><td class="bredecode"> * // =&gt; true</td></tr><tr><td class="codekolom">2292</td><td class="codekolom">2338</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">2293</td><td class="codekolom">2339</td><td class="bredecode"> * _.contains([1, 2, 3], 1, 2);</td></tr><tr><td class="codekolom">2294</td><td class="codekolom">2340</td><td class="bredecode"> * // =&gt; false</td></tr><tr><td class="codekolom">2295</td><td class="codekolom">2341</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">2296</td><td class="codekolom">2342</td><td class="bredecode"> * _.contains({ 'name': 'moe', 'age': 40 }, 'moe');</td></tr><tr><td class="codekolom">2297</td><td class="codekolom">2343</td><td class="bredecode"> * // =&gt; true</td></tr><tr><td class="codekolom">2298</td><td class="codekolom">2344</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">2299</td><td class="codekolom">2345</td><td class="bredecode"> * _.contains('curly', 'ur');</td></tr><tr><td class="codekolom">2300</td><td class="codekolom">2346</td><td class="bredecode"> * // =&gt; true</td></tr><tr><td class="codekolom">2301</td><td class="codekolom">2347</td><td class="bredecode"> */</td></tr><tr><td class="codekolom">2302</td><td class="codekolom">2348</td><td class="bredecode"> function contains(collection, target, fromIndex) {</td></tr><tr><td class="codekolom">2303</td><td class="codekolom">2349</td><td class="bredecode"> var index = -1,</td></tr><tr><td class="codekolom">2304</td><td class="codekolom">2350</td><td class="bredecode"> indexOf = getIndexOf(),</td></tr><tr><td class="codekolom">2305</td><td class="codekolom">2351</td><td class="bredecode"> length = collection ? collection.length : 0,</td></tr><tr><td class="codekolom">2306</td><td class="codekolom">2352</td><td class="bredecode"> result = false;</td></tr><tr><td class="codekolom">2307</td><td class="codekolom">2353</td><td class="bredecode"> </td></tr><tr><td class="codekolom">2308</td><td class="codekolom">2354</td><td class="bredecode"> fromIndex = (fromIndex &lt; 0 ? nativeMax(0, length + fromIndex) : fromIndex) || 0;</td></tr><tr><td class="codekolom">2309</td><td class="codekolom">2355</td><td class="bredecode"> if (length &amp;&amp; typeof length == 'number') {</td></tr><tr><td class="codekolom">2310</td><td class="codekolom">2356</td><td class="bredecode"> result = (isString(collection)</td></tr><tr><td class="codekolom">2311</td><td class="codekolom">2357</td><td class="bredecode"> ? collection.indexOf(target, fromIndex)</td></tr><tr><td class="codekolom">2312</td><td class="codekolom">2358</td><td class="bredecode"> : indexOf(collection, target, fromIndex)</td></tr><tr><td class="codekolom">2313</td><td class="codekolom">2359</td><td class="bredecode"> ) &gt; -1;</td></tr><tr><td class="codekolom">2314</td><td class="codekolom">2360</td><td class="bredecode"> } else {</td></tr><tr><td class="codekolom">2315</td><td class="codekolom">2361</td><td class="bredecode"> forOwn(collection, function(value) {</td></tr><tr><td class="codekolom">2316</td><td class="codekolom">2362</td><td class="bredecode"> if (++index &gt;= fromIndex) {</td></tr><tr><td class="codekolom">2317</td><td class="codekolom">2363</td><td class="bredecode"> return !(result = value === target);</td></tr><tr><td class="codekolom">2318</td><td class="codekolom">2364</td><td class="bredecode"> }</td></tr><tr><td class="codekolom">2319</td><td class="codekolom">2365</td><td class="bredecode"> });</td></tr><tr><td class="codekolom">2320</td><td class="codekolom">2366</td><td class="bredecode"> }</td></tr><tr><td class="codekolom">2321</td><td class="codekolom">2367</td><td class="bredecode"> return result;</td></tr><tr><td class="codekolom">2322</td><td class="codekolom">2368</td><td class="bredecode"> }</td></tr><tr><td class="codekolom">2323</td><td class="codekolom">2369</td><td class="bredecode"> </td></tr><tr><td class="codekolom">2324</td><td class="codekolom">2370</td><td class="bredecode"> /**</td></tr><tr><td class="codekolom">2325</td><td class="codekolom">2371</td><td class="bredecode"> * Creates an object composed of keys returned from running each element of the</td></tr><tr><td class="codekolom">2326</td><td class="codekolom">2372</td><td class="bredecode"> * `collection` through the given `callback`. The corresponding value of each key</td></tr><tr><td class="codekolom">2327</td><td class="codekolom">2373</td><td class="bredecode"> * is the number of times the key was returned by the `callback`. The `callback`</td></tr><tr><td class="codekolom">2328</td><td class="codekolom">2374</td><td class="bredecode"> * is bound to `thisArg` and invoked with three arguments; (value, index|key, collection).</td></tr><tr><td class="codekolom">2329</td><td class="codekolom">2375</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">2330</td><td class="codekolom">2376</td><td class="bredecode"> * If a property name is passed for `callback`, the created "_.pluck" style</td></tr><tr><td class="codekolom">2331</td><td class="codekolom">2377</td><td class="bredecode"> * callback will return the property value of the given element.</td></tr><tr><td class="codekolom">2332</td><td class="codekolom">2378</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">2333</td><td class="codekolom">2379</td><td class="bredecode"> * If an object is passed for `callback`, the created "_.where" style callback</td></tr><tr><td class="codekolom">2334</td><td class="codekolom">2380</td><td class="bredecode"> * will return `true` for elements that have the properties of the given object,</td></tr><tr><td class="codekolom">2335</td><td class="codekolom">2381</td><td class="bredecode"> * else `false`.</td></tr><tr><td class="codekolom">2336</td><td class="codekolom">2382</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">2337</td><td class="codekolom">2383</td><td class="bredecode"> * @static</td></tr><tr><td class="codekolom">2338</td><td class="codekolom">2384</td><td class="bredecode"> * @memberOf _</td></tr><tr><td class="codekolom">2339</td><td class="codekolom">2385</td><td class="bredecode"> * @category Collections</td></tr><tr><td class="codekolom">2340</td><td class="codekolom">2386</td><td class="bredecode"> * @param {Array|Object|String} collection The collection to iterate over.</td></tr><tr><td class="codekolom">2341</td><td class="codekolom">2387</td><td class="bredecode"> * @param {Function|Object|String} [callback=identity] The function called per</td></tr><tr><td class="codekolom">2342</td><td class="codekolom">2388</td><td class="bredecode"> * iteration. If a property name or object is passed, it will be used to create</td></tr><tr><td class="codekolom">2343</td><td class="codekolom">2389</td><td class="bredecode"> * a "_.pluck" or "_.where" style callback, respectively.</td></tr><tr><td class="codekolom">2344</td><td class="codekolom">2390</td><td class="bredecode"> * @param {Mixed} [thisArg] The `this` binding of `callback`.</td></tr><tr><td class="codekolom">2345</td><td class="codekolom">2391</td><td class="bredecode"> * @returns {Object} Returns the composed aggregate object.</td></tr><tr><td class="codekolom">2346</td><td class="codekolom">2392</td><td class="bredecode"> * @example</td></tr><tr><td class="codekolom">2347</td><td class="codekolom">2393</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">2348</td><td class="codekolom">2394</td><td class="bredecode"> * _.countBy([4.3, 6.1, 6.4], function(num) { return Math.floor(num); });</td></tr><tr><td class="codekolom">2349</td><td class="codekolom">2395</td><td class="bredecode"> * // =&gt; { '4': 1, '6': 2 }</td></tr><tr><td class="codekolom">2350</td><td class="codekolom">2396</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">2351</td><td class="codekolom">2397</td><td class="bredecode"> * _.countBy([4.3, 6.1, 6.4], function(num) { return this.floor(num); }, Math);</td></tr><tr><td class="codekolom">2352</td><td class="codekolom">2398</td><td class="bredecode"> * // =&gt; { '4': 1, '6': 2 }</td></tr><tr><td class="codekolom">2353</td><td class="codekolom">2399</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">2354</td><td class="codekolom">2400</td><td class="bredecode"> * _.countBy(['one', 'two', 'three'], 'length');</td></tr><tr><td class="codekolom">2355</td><td class="codekolom">2401</td><td class="bredecode"> * // =&gt; { '3': 2, '5': 1 }</td></tr><tr><td class="codekolom">2356</td><td class="codekolom">2402</td><td class="bredecode"> */</td></tr><tr class="del"><td class="codekolom">2357</td><td class="codekolom"></td><td class="bredecode">- function countBy(collection, callback, thisArg) {</td></tr><tr class="add"><td class="codekolom"></td><td class="codekolom">2403</td><td class="bredecode">+ var countBy = function countBy(callback, collection, thisArg) {</td></tr><tr><td class="codekolom">2358</td><td class="codekolom">2404</td><td class="bredecode"> var result = {};</td></tr><tr><td class="codekolom">2359</td><td class="codekolom">2405</td><td class="bredecode"> callback = lodash.createCallback(callback, thisArg);</td></tr><tr><td class="codekolom">2360</td><td class="codekolom">2406</td><td class="bredecode"> </td></tr><tr class="del"><td class="codekolom">2361</td><td class="codekolom"></td><td class="bredecode">- forEach(collection, function(value, key, collection) {</td></tr><tr class="add"><td class="codekolom"></td><td class="codekolom">2407</td><td class="bredecode">+ forEach(function(value, key, collection) {</td></tr><tr><td class="codekolom">2362</td><td class="codekolom">2408</td><td class="bredecode"> key = String(callback(value, key, collection));</td></tr><tr><td class="codekolom">2363</td><td class="codekolom">2409</td><td class="bredecode"> (hasOwnProperty.call(result, key) ? result[key]++ : result[key] = 1);</td></tr><tr class="del"><td class="codekolom">2364</td><td class="codekolom"></td><td class="bredecode">- });</td></tr><tr class="add"><td class="codekolom"></td><td class="codekolom">2410</td><td class="bredecode">+ }, collection);</td></tr><tr><td class="codekolom">2365</td><td class="codekolom">2411</td><td class="bredecode"> return result;</td></tr><tr class="del"><td class="codekolom">2366</td><td class="codekolom"></td><td class="bredecode">- }</td></tr><tr class="add"><td class="codekolom"></td><td class="codekolom">2412</td><td class="bredecode">+ }.autoCurry(2);</td></tr><tr><td class="codekolom">2367</td><td class="codekolom">2413</td><td class="bredecode"> </td></tr><tr><td class="codekolom">2368</td><td class="codekolom">2414</td><td class="bredecode"> /**</td></tr><tr><td class="codekolom">2369</td><td class="codekolom">2415</td><td class="bredecode"> * Checks if the `callback` returns a truthy value for **all** elements of a</td></tr><tr><td class="codekolom">2370</td><td class="codekolom">2416</td><td class="bredecode"> * `collection`. The `callback` is bound to `thisArg` and invoked with three</td></tr><tr><td class="codekolom">2371</td><td class="codekolom">2417</td><td class="bredecode"> * arguments; (value, index|key, collection).</td></tr><tr><td class="codekolom">2372</td><td class="codekolom">2418</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">2373</td><td class="codekolom">2419</td><td class="bredecode"> * If a property name is passed for `callback`, the created "_.pluck" style</td></tr><tr><td class="codekolom">2374</td><td class="codekolom">2420</td><td class="bredecode"> * callback will return the property value of the given element.</td></tr><tr><td class="codekolom">2375</td><td class="codekolom">2421</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">2376</td><td class="codekolom">2422</td><td class="bredecode"> * If an object is passed for `callback`, the created "_.where" style callback</td></tr><tr><td class="codekolom">2377</td><td class="codekolom">2423</td><td class="bredecode"> * will return `true` for elements that have the properties of the given object,</td></tr><tr><td class="codekolom">2378</td><td class="codekolom">2424</td><td class="bredecode"> * else `false`.</td></tr><tr><td class="codekolom">2379</td><td class="codekolom">2425</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">2380</td><td class="codekolom">2426</td><td class="bredecode"> * @static</td></tr><tr><td class="codekolom">2381</td><td class="codekolom">2427</td><td class="bredecode"> * @memberOf _</td></tr><tr><td class="codekolom">2382</td><td class="codekolom">2428</td><td class="bredecode"> * @alias all</td></tr><tr><td class="codekolom">2383</td><td class="codekolom">2429</td><td class="bredecode"> * @category Collections</td></tr><tr><td class="codekolom">2384</td><td class="codekolom">2430</td><td class="bredecode"> * @param {Array|Object|String} collection The collection to iterate over.</td></tr><tr><td class="codekolom">2385</td><td class="codekolom">2431</td><td class="bredecode"> * @param {Function|Object|String} [callback=identity] The function called per</td></tr><tr><td class="codekolom">2386</td><td class="codekolom">2432</td><td class="bredecode"> * iteration. If a property name or object is passed, it will be used to create</td></tr><tr><td class="codekolom">2387</td><td class="codekolom">2433</td><td class="bredecode"> * a "_.pluck" or "_.where" style callback, respectively.</td></tr><tr><td class="codekolom">2388</td><td class="codekolom">2434</td><td class="bredecode"> * @param {Mixed} [thisArg] The `this` binding of `callback`.</td></tr><tr><td class="codekolom">2389</td><td class="codekolom">2435</td><td class="bredecode"> * @returns {Boolean} Returns `true` if all elements pass the callback check,</td></tr><tr><td class="codekolom">2390</td><td class="codekolom">2436</td><td class="bredecode"> * else `false`.</td></tr><tr><td class="codekolom">2391</td><td class="codekolom">2437</td><td class="bredecode"> * @example</td></tr><tr><td class="codekolom">2392</td><td class="codekolom">2438</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">2393</td><td class="codekolom">2439</td><td class="bredecode"> * _.every([true, 1, null, 'yes'], Boolean);</td></tr><tr><td class="codekolom">2394</td><td class="codekolom">2440</td><td class="bredecode"> * // =&gt; false</td></tr><tr><td class="codekolom">2395</td><td class="codekolom">2441</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">2396</td><td class="codekolom">2442</td><td class="bredecode"> * var stooges = [</td></tr><tr><td class="codekolom">2397</td><td class="codekolom">2443</td><td class="bredecode"> * { 'name': 'moe', 'age': 40 },</td></tr><tr><td class="codekolom">2398</td><td class="codekolom">2444</td><td class="bredecode"> * { 'name': 'larry', 'age': 50 }</td></tr><tr><td class="codekolom">2399</td><td class="codekolom">2445</td><td class="bredecode"> * ];</td></tr><tr><td class="codekolom">2400</td><td class="codekolom">2446</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">2401</td><td class="codekolom">2447</td><td class="bredecode"> * // using "_.pluck" callback shorthand</td></tr><tr><td class="codekolom">2402</td><td class="codekolom">2448</td><td class="bredecode"> * _.every(stooges, 'age');</td></tr><tr><td class="codekolom">2403</td><td class="codekolom">2449</td><td class="bredecode"> * // =&gt; true</td></tr><tr><td class="codekolom">2404</td><td class="codekolom">2450</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">2405</td><td class="codekolom">2451</td><td class="bredecode"> * // using "_.where" callback shorthand</td></tr><tr><td class="codekolom">2406</td><td class="codekolom">2452</td><td class="bredecode"> * _.every(stooges, { 'age': 50 });</td></tr><tr><td class="codekolom">2407</td><td class="codekolom">2453</td><td class="bredecode"> * // =&gt; false</td></tr><tr><td class="codekolom">2408</td><td class="codekolom">2454</td><td class="bredecode"> */</td></tr><tr class="del"><td class="codekolom">2409</td><td class="codekolom"></td><td class="bredecode">- function every(collection, callback, thisArg) {</td></tr><tr class="add"><td class="codekolom"></td><td class="codekolom">2455</td><td class="bredecode">+ var every = function every(callback, collection, thisArg) {</td></tr><tr><td class="codekolom">2410</td><td class="codekolom">2456</td><td class="bredecode"> var result = true;</td></tr><tr><td class="codekolom">2411</td><td class="codekolom">2457</td><td class="bredecode"> callback = lodash.createCallback(callback, thisArg);</td></tr><tr><td class="codekolom">2412</td><td class="codekolom">2458</td><td class="bredecode"> </td></tr><tr><td class="codekolom">2413</td><td class="codekolom">2459</td><td class="bredecode"> var index = -1,</td></tr><tr><td class="codekolom">2414</td><td class="codekolom">2460</td><td class="bredecode"> length = collection ? collection.length : 0;</td></tr><tr><td class="codekolom">2415</td><td class="codekolom">2461</td><td class="bredecode"> </td></tr><tr><td class="codekolom">2416</td><td class="codekolom">2462</td><td class="bredecode"> if (typeof length == 'number') {</td></tr><tr><td class="codekolom">2417</td><td class="codekolom">2463</td><td class="bredecode"> while (++index &lt; length) {</td></tr><tr><td class="codekolom">2418</td><td class="codekolom">2464</td><td class="bredecode"> if (!(result = !!callback(collection[index], index, collection))) {</td></tr><tr><td class="codekolom">2419</td><td class="codekolom">2465</td><td class="bredecode"> break;</td></tr><tr><td class="codekolom">2420</td><td class="codekolom">2466</td><td class="bredecode"> }</td></tr><tr><td class="codekolom">2421</td><td class="codekolom">2467</td><td class="bredecode"> }</td></tr><tr><td class="codekolom">2422</td><td class="codekolom">2468</td><td class="bredecode"> } else {</td></tr><tr><td class="codekolom">2423</td><td class="codekolom">2469</td><td class="bredecode"> forOwn(collection, function(value, index, collection) {</td></tr><tr><td class="codekolom">2424</td><td class="codekolom">2470</td><td class="bredecode"> return (result = !!callback(value, index, collection));</td></tr><tr><td class="codekolom">2425</td><td class="codekolom">2471</td><td class="bredecode"> });</td></tr><tr><td class="codekolom">2426</td><td class="codekolom">2472</td><td class="bredecode"> }</td></tr><tr><td class="codekolom">2427</td><td class="codekolom">2473</td><td class="bredecode"> return result;</td></tr><tr class="del"><td class="codekolom">2428</td><td class="codekolom"></td><td class="bredecode">- }</td></tr><tr class="add"><td class="codekolom"></td><td class="codekolom">2474</td><td class="bredecode">+ }.autoCurry(2)</td></tr><tr><td class="codekolom">2429</td><td class="codekolom">2475</td><td class="bredecode"> </td></tr><tr><td class="codekolom">2430</td><td class="codekolom">2476</td><td class="bredecode"> /**</td></tr><tr><td class="codekolom">2431</td><td class="codekolom">2477</td><td class="bredecode"> * Examines each element in a `collection`, returning an array of all elements</td></tr><tr><td class="codekolom">2432</td><td class="codekolom">2478</td><td class="bredecode"> * the `callback` returns truthy for. The `callback` is bound to `thisArg` and</td></tr><tr><td class="codekolom">2433</td><td class="codekolom">2479</td><td class="bredecode"> * invoked with three arguments; (value, index|key, collection).</td></tr><tr><td class="codekolom">2434</td><td class="codekolom">2480</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">2435</td><td class="codekolom">2481</td><td class="bredecode"> * If a property name is passed for `callback`, the created "_.pluck" style</td></tr><tr><td class="codekolom">2436</td><td class="codekolom">2482</td><td class="bredecode"> * callback will return the property value of the given element.</td></tr><tr><td class="codekolom">2437</td><td class="codekolom">2483</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">2438</td><td class="codekolom">2484</td><td class="bredecode"> * If an object is passed for `callback`, the created "_.where" style callback</td></tr><tr><td class="codekolom">2439</td><td class="codekolom">2485</td><td class="bredecode"> * will return `true` for elements that have the properties of the given object,</td></tr><tr><td class="codekolom">2440</td><td class="codekolom">2486</td><td class="bredecode"> * else `false`.</td></tr><tr><td class="codekolom">2441</td><td class="codekolom">2487</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">2442</td><td class="codekolom">2488</td><td class="bredecode"> * @static</td></tr><tr><td class="codekolom">2443</td><td class="codekolom">2489</td><td class="bredecode"> * @memberOf _</td></tr><tr><td class="codekolom">2444</td><td class="codekolom">2490</td><td class="bredecode"> * @alias select</td></tr><tr><td class="codekolom">2445</td><td class="codekolom">2491</td><td class="bredecode"> * @category Collections</td></tr><tr><td class="codekolom">2446</td><td class="codekolom">2492</td><td class="bredecode"> * @param {Array|Object|String} collection The collection to iterate over.</td></tr><tr><td class="codekolom">2447</td><td class="codekolom">2493</td><td class="bredecode"> * @param {Function|Object|String} [callback=identity] The function called per</td></tr><tr><td class="codekolom">2448</td><td class="codekolom">2494</td><td class="bredecode"> * iteration. If a property name or object is passed, it will be used to create</td></tr><tr><td class="codekolom">2449</td><td class="codekolom">2495</td><td class="bredecode"> * a "_.pluck" or "_.where" style callback, respectively.</td></tr><tr><td class="codekolom">2450</td><td class="codekolom">2496</td><td class="bredecode"> * @param {Mixed} [thisArg] The `this` binding of `callback`.</td></tr><tr><td class="codekolom">2451</td><td class="codekolom">2497</td><td class="bredecode"> * @returns {Array} Returns a new array of elements that passed the callback check.</td></tr><tr><td class="codekolom">2452</td><td class="codekolom">2498</td><td class="bredecode"> * @example</td></tr><tr><td class="codekolom">2453</td><td class="codekolom">2499</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">2454</td><td class="codekolom">2500</td><td class="bredecode"> * var evens = _.filter([1, 2, 3, 4, 5, 6], function(num) { return num % 2 == 0; });</td></tr><tr><td class="codekolom">2455</td><td class="codekolom">2501</td><td class="bredecode"> * // =&gt; [2, 4, 6]</td></tr><tr><td class="codekolom">2456</td><td class="codekolom">2502</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">2457</td><td class="codekolom">2503</td><td class="bredecode"> * var food = [</td></tr><tr><td class="codekolom">2458</td><td class="codekolom">2504</td><td class="bredecode"> * { 'name': 'apple', 'organic': false, 'type': 'fruit' },</td></tr><tr><td class="codekolom">2459</td><td class="codekolom">2505</td><td class="bredecode"> * { 'name': 'carrot', 'organic': true, 'type': 'vegetable' }</td></tr><tr><td class="codekolom">2460</td><td class="codekolom">2506</td><td class="bredecode"> * ];</td></tr><tr><td class="codekolom">2461</td><td class="codekolom">2507</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">2462</td><td class="codekolom">2508</td><td class="bredecode"> * // using "_.pluck" callback shorthand</td></tr><tr><td class="codekolom">2463</td><td class="codekolom">2509</td><td class="bredecode"> * _.filter(food, 'organic');</td></tr><tr><td class="codekolom">2464</td><td class="codekolom">2510</td><td class="bredecode"> * // =&gt; [{ 'name': 'carrot', 'organic': true, 'type': 'vegetable' }]</td></tr><tr><td class="codekolom">2465</td><td class="codekolom">2511</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">2466</td><td class="codekolom">2512</td><td class="bredecode"> * // using "_.where" callback shorthand</td></tr><tr><td class="codekolom">2467</td><td class="codekolom">2513</td><td class="bredecode"> * _.filter(food, { 'type': 'fruit' });</td></tr><tr><td class="codekolom">2468</td><td class="codekolom">2514</td><td class="bredecode"> * // =&gt; [{ 'name': 'apple', 'organic': false, 'type': 'fruit' }]</td></tr><tr><td class="codekolom">2469</td><td class="codekolom">2515</td><td class="bredecode"> */</td></tr><tr class="del"><td class="codekolom">2470</td><td class="codekolom"></td><td class="bredecode">- function filter(collection, callback, thisArg) {</td></tr><tr class="add"><td class="codekolom"></td><td class="codekolom">2516</td><td class="bredecode">+ var filter = function filter(callback, collection, thisArg) {</td></tr><tr><td class="codekolom">2471</td><td class="codekolom">2517</td><td class="bredecode"> var result = [];</td></tr><tr><td class="codekolom">2472</td><td class="codekolom">2518</td><td class="bredecode"> callback = lodash.createCallback(callback, thisArg);</td></tr><tr><td class="codekolom">2473</td><td class="codekolom">2519</td><td class="bredecode"> </td></tr><tr><td class="codekolom">2474</td><td class="codekolom">2520</td><td class="bredecode"> var index = -1,</td></tr><tr><td class="codekolom">2475</td><td class="codekolom">2521</td><td class="bredecode"> length = collection ? collection.length : 0;</td></tr><tr><td class="codekolom">2476</td><td class="codekolom">2522</td><td class="bredecode"> </td></tr><tr><td class="codekolom">2477</td><td class="codekolom">2523</td><td class="bredecode"> if (typeof length == 'number') {</td></tr><tr><td class="codekolom">2478</td><td class="codekolom">2524</td><td class="bredecode"> while (++index &lt; length) {</td></tr><tr><td class="codekolom">2479</td><td class="codekolom">2525</td><td class="bredecode"> var value = collection[index];</td></tr><tr><td class="codekolom">2480</td><td class="codekolom">2526</td><td class="bredecode"> if (callback(value, index, collection)) {</td></tr><tr><td class="codekolom">2481</td><td class="codekolom">2527</td><td class="bredecode"> result.push(value);</td></tr><tr><td class="codekolom">2482</td><td class="codekolom">2528</td><td class="bredecode"> }</td></tr><tr><td class="codekolom">2483</td><td class="codekolom">2529</td><td class="bredecode"> }</td></tr><tr><td class="codekolom">2484</td><td class="codekolom">2530</td><td class="bredecode"> } else {</td></tr><tr><td class="codekolom">2485</td><td class="codekolom">2531</td><td class="bredecode"> forOwn(collection, function(value, index, collection) {</td></tr><tr><td class="codekolom">2486</td><td class="codekolom">2532</td><td class="bredecode"> if (callback(value, index, collection)) {</td></tr><tr><td class="codekolom">2487</td><td class="codekolom">2533</td><td class="bredecode"> result.push(value);</td></tr><tr><td class="codekolom">2488</td><td class="codekolom">2534</td><td class="bredecode"> }</td></tr><tr><td class="codekolom">2489</td><td class="codekolom">2535</td><td class="bredecode"> });</td></tr><tr><td class="codekolom">2490</td><td class="codekolom">2536</td><td class="bredecode"> }</td></tr><tr><td class="codekolom">2491</td><td class="codekolom">2537</td><td class="bredecode"> return result;</td></tr><tr class="del"><td class="codekolom">2492</td><td class="codekolom"></td><td class="bredecode">- }</td></tr><tr class="add"><td class="codekolom"></td><td class="codekolom">2538</td><td class="bredecode">+ }.autoCurry(2);</td></tr><tr><td class="codekolom">2493</td><td class="codekolom">2539</td><td class="bredecode"> </td></tr><tr><td class="codekolom">2494</td><td class="codekolom">2540</td><td class="bredecode"> /**</td></tr><tr><td class="codekolom">2495</td><td class="codekolom">2541</td><td class="bredecode"> * Examines each element in a `collection`, returning the first that the `callback`</td></tr><tr><td class="codekolom">2496</td><td class="codekolom">2542</td><td class="bredecode"> * returns truthy for. The `callback` is bound to `thisArg` and invoked with three</td></tr><tr><td class="codekolom">2497</td><td class="codekolom">2543</td><td class="bredecode"> * arguments; (value, index|key, collection).</td></tr><tr><td class="codekolom">2498</td><td class="codekolom">2544</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">2499</td><td class="codekolom">2545</td><td class="bredecode"> * If a property name is passed for `callback`, the created "_.pluck" style</td></tr><tr><td class="codekolom">2500</td><td class="codekolom">2546</td><td class="bredecode"> * callback will return the property value of the given element.</td></tr><tr><td class="codekolom">2501</td><td class="codekolom">2547</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">2502</td><td class="codekolom">2548</td><td class="bredecode"> * If an object is passed for `callback`, the created "_.where" style callback</td></tr><tr><td class="codekolom">2503</td><td class="codekolom">2549</td><td class="bredecode"> * will return `true` for elements that have the properties of the given object,</td></tr><tr><td class="codekolom">2504</td><td class="codekolom">2550</td><td class="bredecode"> * else `false`.</td></tr><tr><td class="codekolom">2505</td><td class="codekolom">2551</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">2506</td><td class="codekolom">2552</td><td class="bredecode"> * @static</td></tr><tr><td class="codekolom">2507</td><td class="codekolom">2553</td><td class="bredecode"> * @memberOf _</td></tr><tr><td class="codekolom">2508</td><td class="codekolom">2554</td><td class="bredecode"> * @alias detect, findWhere</td></tr><tr><td class="codekolom">2509</td><td class="codekolom">2555</td><td class="bredecode"> * @category Collections</td></tr><tr><td class="codekolom">2510</td><td class="codekolom">2556</td><td class="bredecode"> * @param {Array|Object|String} collection The collection to iterate over.</td></tr><tr><td class="codekolom">2511</td><td class="codekolom">2557</td><td class="bredecode"> * @param {Function|Object|String} [callback=identity] The function called per</td></tr><tr><td class="codekolom">2512</td><td class="codekolom">2558</td><td class="bredecode"> * iteration. If a property name or object is passed, it will be used to create</td></tr><tr><td class="codekolom">2513</td><td class="codekolom">2559</td><td class="bredecode"> * a "_.pluck" or "_.where" style callback, respectively.</td></tr><tr><td class="codekolom">2514</td><td class="codekolom">2560</td><td class="bredecode"> * @param {Mixed} [thisArg] The `this` binding of `callback`.</td></tr><tr><td class="codekolom">2515</td><td class="codekolom">2561</td><td class="bredecode"> * @returns {Mixed} Returns the found element, else `undefined`.</td></tr><tr><td class="codekolom">2516</td><td class="codekolom">2562</td><td class="bredecode"> * @example</td></tr><tr><td class="codekolom">2517</td><td class="codekolom">2563</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">2518</td><td class="codekolom">2564</td><td class="bredecode"> * _.find([1, 2, 3, 4], function(num) {</td></tr><tr><td class="codekolom">2519</td><td class="codekolom">2565</td><td class="bredecode"> * return num % 2 == 0;</td></tr><tr><td class="codekolom">2520</td><td class="codekolom">2566</td><td class="bredecode"> * });</td></tr><tr><td class="codekolom">2521</td><td class="codekolom">2567</td><td class="bredecode"> * // =&gt; 2</td></tr><tr><td class="codekolom">2522</td><td class="codekolom">2568</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">2523</td><td class="codekolom">2569</td><td class="bredecode"> * var food = [</td></tr><tr><td class="codekolom">2524</td><td class="codekolom">2570</td><td class="bredecode"> * { 'name': 'apple', 'organic': false, 'type': 'fruit' },</td></tr><tr><td class="codekolom">2525</td><td class="codekolom">2571</td><td class="bredecode"> * { 'name': 'banana', 'organic': true, 'type': 'fruit' },</td></tr><tr><td class="codekolom">2526</td><td class="codekolom">2572</td><td class="bredecode"> * { 'name': 'beet', 'organic': false, 'type': 'vegetable' }</td></tr><tr><td class="codekolom">2527</td><td class="codekolom">2573</td><td class="bredecode"> * ];</td></tr><tr><td class="codekolom">2528</td><td class="codekolom">2574</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">2529</td><td class="codekolom">2575</td><td class="bredecode"> * // using "_.where" callback shorthand</td></tr><tr><td class="codekolom">2530</td><td class="codekolom">2576</td><td class="bredecode"> * _.find(food, { 'type': 'vegetable' });</td></tr><tr><td class="codekolom">2531</td><td class="codekolom">2577</td><td class="bredecode"> * // =&gt; { 'name': 'beet', 'organic': false, 'type': 'vegetable' }</td></tr><tr><td class="codekolom">2532</td><td class="codekolom">2578</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">2533</td><td class="codekolom">2579</td><td class="bredecode"> * // using "_.pluck" callback shorthand</td></tr><tr><td class="codekolom">2534</td><td class="codekolom">2580</td><td class="bredecode"> * _.find(food, 'organic');</td></tr><tr><td class="codekolom">2535</td><td class="codekolom">2581</td><td class="bredecode"> * // =&gt; { 'name': 'banana', 'organic': true, 'type': 'fruit' }</td></tr><tr><td class="codekolom">2536</td><td class="codekolom">2582</td><td class="bredecode"> */</td></tr><tr class="del"><td class="codekolom">2537</td><td class="codekolom"></td><td class="bredecode">- function find(collection, callback, thisArg) {</td></tr><tr class="add"><td class="codekolom"></td><td class="codekolom">2583</td><td class="bredecode">+ var find = function find(callback, collection, thisArg) {</td></tr><tr><td class="codekolom">2538</td><td class="codekolom">2584</td><td class="bredecode"> callback = lodash.createCallback(callback, thisArg);</td></tr><tr><td class="codekolom">2539</td><td class="codekolom">2585</td><td class="bredecode"> </td></tr><tr><td class="codekolom">2540</td><td class="codekolom">2586</td><td class="bredecode"> var index = -1,</td></tr><tr><td class="codekolom">2541</td><td class="codekolom">2587</td><td class="bredecode"> length = collection ? collection.length : 0;</td></tr><tr><td class="codekolom">2542</td><td class="codekolom">2588</td><td class="bredecode"> </td></tr><tr><td class="codekolom">2543</td><td class="codekolom">2589</td><td class="bredecode"> if (typeof length == 'number') {</td></tr><tr><td class="codekolom">2544</td><td class="codekolom">2590</td><td class="bredecode"> while (++index &lt; length) {</td></tr><tr><td class="codekolom">2545</td><td class="codekolom">2591</td><td class="bredecode"> var value = collection[index];</td></tr><tr><td class="codekolom">2546</td><td class="codekolom">2592</td><td class="bredecode"> if (callback(value, index, collection)) {</td></tr><tr><td class="codekolom">2547</td><td class="codekolom">2593</td><td class="bredecode"> return value;</td></tr><tr><td class="codekolom">2548</td><td class="codekolom">2594</td><td class="bredecode"> }</td></tr><tr><td class="codekolom">2549</td><td class="codekolom">2595</td><td class="bredecode"> }</td></tr><tr><td class="codekolom">2550</td><td class="codekolom">2596</td><td class="bredecode"> } else {</td></tr><tr><td class="codekolom">2551</td><td class="codekolom">2597</td><td class="bredecode"> var result;</td></tr><tr><td class="codekolom">2552</td><td class="codekolom">2598</td><td class="bredecode"> forOwn(collection, function(value, index, collection) {</td></tr><tr><td class="codekolom">2553</td><td class="codekolom">2599</td><td class="bredecode"> if (callback(value, index, collection)) {</td></tr><tr><td class="codekolom">2554</td><td class="codekolom">2600</td><td class="bredecode"> result = value;</td></tr><tr><td class="codekolom">2555</td><td class="codekolom">2601</td><td class="bredecode"> return false;</td></tr><tr><td class="codekolom">2556</td><td class="codekolom">2602</td><td class="bredecode"> }</td></tr><tr><td class="codekolom">2557</td><td class="codekolom">2603</td><td class="bredecode"> });</td></tr><tr><td class="codekolom">2558</td><td class="codekolom">2604</td><td class="bredecode"> return result;</td></tr><tr><td class="codekolom">2559</td><td class="codekolom">2605</td><td class="bredecode"> }</td></tr><tr class="del"><td class="codekolom">2560</td><td class="codekolom"></td><td class="bredecode">- }</td></tr><tr class="add"><td class="codekolom"></td><td class="codekolom">2606</td><td class="bredecode">+ }.autoCurry(2);</td></tr><tr><td class="codekolom">2561</td><td class="codekolom">2607</td><td class="bredecode"> </td></tr><tr><td class="codekolom">2562</td><td class="codekolom">2608</td><td class="bredecode"> /**</td></tr><tr><td class="codekolom">2563</td><td class="codekolom">2609</td><td class="bredecode"> * Iterates over a `collection`, executing the `callback` for each element in</td></tr><tr><td class="codekolom">2564</td><td class="codekolom">2610</td><td class="bredecode"> * the `collection`. The `callback` is bound to `thisArg` and invoked with three</td></tr><tr><td class="codekolom">2565</td><td class="codekolom">2611</td><td class="bredecode"> * arguments; (value, index|key, collection). Callbacks may exit iteration early</td></tr><tr><td class="codekolom">2566</td><td class="codekolom">2612</td><td class="bredecode"> * by explicitly returning `false`.</td></tr><tr><td class="codekolom">2567</td><td class="codekolom">2613</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">2568</td><td class="codekolom">2614</td><td class="bredecode"> * @static</td></tr><tr><td class="codekolom">2569</td><td class="codekolom">2615</td><td class="bredecode"> * @memberOf _</td></tr><tr><td class="codekolom">2570</td><td class="codekolom">2616</td><td class="bredecode"> * @alias each</td></tr><tr><td class="codekolom">2571</td><td class="codekolom">2617</td><td class="bredecode"> * @category Collections</td></tr><tr><td class="codekolom">2572</td><td class="codekolom">2618</td><td class="bredecode"> * @param {Array|Object|String} collection The collection to iterate over.</td></tr><tr><td class="codekolom">2573</td><td class="codekolom">2619</td><td class="bredecode"> * @param {Function} [callback=identity] The function called per iteration.</td></tr><tr><td class="codekolom">2574</td><td class="codekolom">2620</td><td class="bredecode"> * @param {Mixed} [thisArg] The `this` binding of `callback`.</td></tr><tr><td class="codekolom">2575</td><td class="codekolom">2621</td><td class="bredecode"> * @returns {Array|Object|String} Returns `collection`.</td></tr><tr><td class="codekolom">2576</td><td class="codekolom">2622</td><td class="bredecode"> * @example</td></tr><tr><td class="codekolom">2577</td><td class="codekolom">2623</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">2578</td><td class="codekolom">2624</td><td class="bredecode"> * _([1, 2, 3]).forEach(alert).join(',');</td></tr><tr><td class="codekolom">2579</td><td class="codekolom">2625</td><td class="bredecode"> * // =&gt; alerts each number and returns '1,2,3'</td></tr><tr><td class="codekolom">2580</td><td class="codekolom">2626</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">2581</td><td class="codekolom">2627</td><td class="bredecode"> * _.forEach({ 'one': 1, 'two': 2, 'three': 3 }, alert);</td></tr><tr><td class="codekolom">2582</td><td class="codekolom">2628</td><td class="bredecode"> * // =&gt; alerts each number value (order is not guaranteed)</td></tr><tr><td class="codekolom">2583</td><td class="codekolom">2629</td><td class="bredecode"> */</td></tr><tr class="del"><td class="codekolom">2584</td><td class="codekolom"></td><td class="bredecode">- function forEach(collection, callback, thisArg) {</td></tr><tr class="add"><td class="codekolom"></td><td class="codekolom">2630</td><td class="bredecode">+ var forEach = function forEach(callback, collection, thisArg) {</td></tr><tr><td class="codekolom">2585</td><td class="codekolom">2631</td><td class="bredecode"> var index = -1,</td></tr><tr><td class="codekolom">2586</td><td class="codekolom">2632</td><td class="bredecode"> length = collection ? collection.length : 0;</td></tr><tr><td class="codekolom">2587</td><td class="codekolom">2633</td><td class="bredecode"> </td></tr><tr><td class="codekolom">2588</td><td class="codekolom">2634</td><td class="bredecode"> callback = callback &amp;&amp; typeof thisArg == 'undefined' ? callback : lodash.createCallback(callback, thisArg);</td></tr><tr><td class="codekolom">2589</td><td class="codekolom">2635</td><td class="bredecode"> if (typeof length == 'number') {</td></tr><tr><td class="codekolom">2590</td><td class="codekolom">2636</td><td class="bredecode"> while (++index &lt; length) {</td></tr><tr><td class="codekolom">2591</td><td class="codekolom">2637</td><td class="bredecode"> if (callback(collection[index], index, collection) === false) {</td></tr><tr><td class="codekolom">2592</td><td class="codekolom">2638</td><td class="bredecode"> break;</td></tr><tr><td class="codekolom">2593</td><td class="codekolom">2639</td><td class="bredecode"> }</td></tr><tr><td class="codekolom">2594</td><td class="codekolom">2640</td><td class="bredecode"> }</td></tr><tr><td class="codekolom">2595</td><td class="codekolom">2641</td><td class="bredecode"> } else {</td></tr><tr><td class="codekolom">2596</td><td class="codekolom">2642</td><td class="bredecode"> forOwn(collection, callback);</td></tr><tr><td class="codekolom">2597</td><td class="codekolom">2643</td><td class="bredecode"> }</td></tr><tr><td class="codekolom">2598</td><td class="codekolom">2644</td><td class="bredecode"> return collection;</td></tr><tr class="del"><td class="codekolom">2599</td><td class="codekolom"></td><td class="bredecode">- }</td></tr><tr class="add"><td class="codekolom"></td><td class="codekolom">2645</td><td class="bredecode">+ }.autoCurry(2);</td></tr><tr><td class="codekolom">2600</td><td class="codekolom">2646</td><td class="bredecode"> </td></tr><tr><td class="codekolom">2601</td><td class="codekolom">2647</td><td class="bredecode"> /**</td></tr><tr><td class="codekolom">2602</td><td class="codekolom">2648</td><td class="bredecode"> * Creates an object composed of keys returned from running each element of the</td></tr><tr><td class="codekolom">2603</td><td class="codekolom">2649</td><td class="bredecode"> * `collection` through the `callback`. The corresponding value of each key is</td></tr><tr><td class="codekolom">2604</td><td class="codekolom">2650</td><td class="bredecode"> * an array of elements passed to `callback` that returned the key. The `callback`</td></tr><tr><td class="codekolom">2605</td><td class="codekolom">2651</td><td class="bredecode"> * is bound to `thisArg` and invoked with three arguments; (value, index|key, collection).</td></tr><tr><td class="codekolom">2606</td><td class="codekolom">2652</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">2607</td><td class="codekolom">2653</td><td class="bredecode"> * If a property name is passed for `callback`, the created "_.pluck" style</td></tr><tr><td class="codekolom">2608</td><td class="codekolom">2654</td><td class="bredecode"> * callback will return the property value of the given element.</td></tr><tr><td class="codekolom">2609</td><td class="codekolom">2655</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">2610</td><td class="codekolom">2656</td><td class="bredecode"> * If an object is passed for `callback`, the created "_.where" style callback</td></tr><tr><td class="codekolom">2611</td><td class="codekolom">2657</td><td class="bredecode"> * will return `true` for elements that have the properties of the given object,</td></tr><tr><td class="codekolom">2612</td><td class="codekolom">2658</td><td class="bredecode"> * else `false`</td></tr><tr><td class="codekolom">2613</td><td class="codekolom">2659</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">2614</td><td class="codekolom">2660</td><td class="bredecode"> * @static</td></tr><tr><td class="codekolom">2615</td><td class="codekolom">2661</td><td class="bredecode"> * @memberOf _</td></tr><tr><td class="codekolom">2616</td><td class="codekolom">2662</td><td class="bredecode"> * @category Collections</td></tr><tr><td class="codekolom">2617</td><td class="codekolom">2663</td><td class="bredecode"> * @param {Array|Object|String} collection The collection to iterate over.</td></tr><tr><td class="codekolom">2618</td><td class="codekolom">2664</td><td class="bredecode"> * @param {Function|Object|String} [callback=identity] The function called per</td></tr><tr><td class="codekolom">2619</td><td class="codekolom">2665</td><td class="bredecode"> * iteration. If a property name or object is passed, it will be used to create</td></tr><tr><td class="codekolom">2620</td><td class="codekolom">2666</td><td class="bredecode"> * a "_.pluck" or "_.where" style callback, respectively.</td></tr><tr><td class="codekolom">2621</td><td class="codekolom">2667</td><td class="bredecode"> * @param {Mixed} [thisArg] The `this` binding of `callback`.</td></tr><tr><td class="codekolom">2622</td><td class="codekolom">2668</td><td class="bredecode"> * @returns {Object} Returns the composed aggregate object.</td></tr><tr><td class="codekolom">2623</td><td class="codekolom">2669</td><td class="bredecode"> * @example</td></tr><tr><td class="codekolom">2624</td><td class="codekolom">2670</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">2625</td><td class="codekolom">2671</td><td class="bredecode"> * _.groupBy([4.2, 6.1, 6.4], function(num) { return Math.floor(num); });</td></tr><tr><td class="codekolom">2626</td><td class="codekolom">2672</td><td class="bredecode"> * // =&gt; { '4': [4.2], '6': [6.1, 6.4] }</td></tr><tr><td class="codekolom">2627</td><td class="codekolom">2673</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">2628</td><td class="codekolom">2674</td><td class="bredecode"> * _.groupBy([4.2, 6.1, 6.4], function(num) { return this.floor(num); }, Math);</td></tr><tr><td class="codekolom">2629</td><td class="codekolom">2675</td><td class="bredecode"> * // =&gt; { '4': [4.2], '6': [6.1, 6.4] }</td></tr><tr><td class="codekolom">2630</td><td class="codekolom">2676</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">2631</td><td class="codekolom">2677</td><td class="bredecode"> * // using "_.pluck" callback shorthand</td></tr><tr><td class="codekolom">2632</td><td class="codekolom">2678</td><td class="bredecode"> * _.groupBy(['one', 'two', 'three'], 'length');</td></tr><tr><td class="codekolom">2633</td><td class="codekolom">2679</td><td class="bredecode"> * // =&gt; { '3': ['one', 'two'], '5': ['three'] }</td></tr><tr><td class="codekolom">2634</td><td class="codekolom">2680</td><td class="bredecode"> */</td></tr><tr class="del"><td class="codekolom">2635</td><td class="codekolom"></td><td class="bredecode">- function groupBy(collection, callback, thisArg) {</td></tr><tr class="add"><td class="codekolom"></td><td class="codekolom">2681</td><td class="bredecode">+ var groupBy = function groupBy(callback, collection, thisArg) {</td></tr><tr><td class="codekolom">2636</td><td class="codekolom">2682</td><td class="bredecode"> var result = {};</td></tr><tr><td class="codekolom">2637</td><td class="codekolom">2683</td><td class="bredecode"> callback = lodash.createCallback(callback, thisArg);</td></tr><tr><td class="codekolom">2638</td><td class="codekolom">2684</td><td class="bredecode"> </td></tr><tr class="del"><td class="codekolom">2639</td><td class="codekolom"></td><td class="bredecode">- forEach(collection, function(value, key, collection) {</td></tr><tr class="add"><td class="codekolom"></td><td class="codekolom">2685</td><td class="bredecode">+ forEach(function(value, key, collection) {</td></tr><tr><td class="codekolom">2640</td><td class="codekolom">2686</td><td class="bredecode"> key = String(callback(value, key, collection));</td></tr><tr><td class="codekolom">2641</td><td class="codekolom">2687</td><td class="bredecode"> (hasOwnProperty.call(result, key) ? result[key] : result[key] = []).push(value);</td></tr><tr class="del"><td class="codekolom">2642</td><td class="codekolom"></td><td class="bredecode">- });</td></tr><tr class="add"><td class="codekolom"></td><td class="codekolom">2688</td><td class="bredecode">+ }, collection);</td></tr><tr><td class="codekolom">2643</td><td class="codekolom">2689</td><td class="bredecode"> return result;</td></tr><tr class="del"><td class="codekolom">2644</td><td class="codekolom"></td><td class="bredecode">- }</td></tr><tr class="add"><td class="codekolom"></td><td class="codekolom">2690</td><td class="bredecode">+ }.autoCurry(2);</td></tr><tr><td class="codekolom">2645</td><td class="codekolom">2691</td><td class="bredecode"> </td></tr><tr><td class="codekolom">2646</td><td class="codekolom">2692</td><td class="bredecode"> /**</td></tr><tr><td class="codekolom">2647</td><td class="codekolom">2693</td><td class="bredecode"> * Invokes the method named by `methodName` on each element in the `collection`,</td></tr><tr><td class="codekolom">2648</td><td class="codekolom">2694</td><td class="bredecode"> * returning an array of the results of each invoked method. Additional arguments</td></tr><tr><td class="codekolom">2649</td><td class="codekolom">2695</td><td class="bredecode"> * will be passed to each invoked method. If `methodName` is a function, it will</td></tr><tr><td class="codekolom">2650</td><td class="codekolom">2696</td><td class="bredecode"> * be invoked for, and `this` bound to, each element in the `collection`.</td></tr><tr><td class="codekolom">2651</td><td class="codekolom">2697</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">2652</td><td class="codekolom">2698</td><td class="bredecode"> * @static</td></tr><tr><td class="codekolom">2653</td><td class="codekolom">2699</td><td class="bredecode"> * @memberOf _</td></tr><tr><td class="codekolom">2654</td><td class="codekolom">2700</td><td class="bredecode"> * @category Collections</td></tr><tr><td class="codekolom">2655</td><td class="codekolom">2701</td><td class="bredecode"> * @param {Array|Object|String} collection The collection to iterate over.</td></tr><tr><td class="codekolom">2656</td><td class="codekolom">2702</td><td class="bredecode"> * @param {Function|String} methodName The name of the method to invoke or</td></tr><tr><td class="codekolom">2657</td><td class="codekolom">2703</td><td class="bredecode"> * the function invoked per iteration.</td></tr><tr><td class="codekolom">2658</td><td class="codekolom">2704</td><td class="bredecode"> * @param {Mixed} [arg1, arg2, ...] Arguments to invoke the method with.</td></tr><tr><td class="codekolom">2659</td><td class="codekolom">2705</td><td class="bredecode"> * @returns {Array} Returns a new array of the results of each invoked method.</td></tr><tr><td class="codekolom">2660</td><td class="codekolom">2706</td><td class="bredecode"> * @example</td></tr><tr><td class="codekolom">2661</td><td class="codekolom">2707</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">2662</td><td class="codekolom">2708</td><td class="bredecode"> * _.invoke([[5, 1, 7], [3, 2, 1]], 'sort');</td></tr><tr><td class="codekolom">2663</td><td class="codekolom">2709</td><td class="bredecode"> * // =&gt; [[1, 5, 7], [1, 2, 3]]</td></tr><tr><td class="codekolom">2664</td><td class="codekolom">2710</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">2665</td><td class="codekolom">2711</td><td class="bredecode"> * _.invoke([123, 456], String.prototype.split, '');</td></tr><tr><td class="codekolom">2666</td><td class="codekolom">2712</td><td class="bredecode"> * // =&gt; [['1', '2', '3'], ['4', '5', '6']]</td></tr><tr><td class="codekolom">2667</td><td class="codekolom">2713</td><td class="bredecode"> */</td></tr><tr><td class="codekolom">2668</td><td class="codekolom">2714</td><td class="bredecode"> function invoke(collection, methodName) {</td></tr><tr><td class="codekolom">2669</td><td class="codekolom">2715</td><td class="bredecode"> var args = nativeSlice.call(arguments, 2),</td></tr><tr><td class="codekolom">2670</td><td class="codekolom">2716</td><td class="bredecode"> index = -1,</td></tr><tr><td class="codekolom">2671</td><td class="codekolom">2717</td><td class="bredecode"> isFunc = typeof methodName == 'function',</td></tr><tr><td class="codekolom">2672</td><td class="codekolom">2718</td><td class="bredecode"> length = collection ? collection.length : 0,</td></tr><tr><td class="codekolom">2673</td><td class="codekolom">2719</td><td class="bredecode"> result = Array(typeof length == 'number' ? length : 0);</td></tr><tr><td class="codekolom">2674</td><td class="codekolom">2720</td><td class="bredecode"> </td></tr><tr class="del"><td class="codekolom">2675</td><td class="codekolom"></td><td class="bredecode">- forEach(collection, function(value) {</td></tr><tr class="add"><td class="codekolom"></td><td class="codekolom">2721</td><td class="bredecode">+ forEach(function(value) {</td></tr><tr><td class="codekolom">2676</td><td class="codekolom">2722</td><td class="bredecode"> result[++index] = (isFunc ? methodName : value[methodName]).apply(value, args);</td></tr><tr class="del"><td class="codekolom">2677</td><td class="codekolom"></td><td class="bredecode">- });</td></tr><tr class="add"><td class="codekolom"></td><td class="codekolom">2723</td><td class="bredecode">+ }, collection);</td></tr><tr><td class="codekolom">2678</td><td class="codekolom">2724</td><td class="bredecode"> return result;</td></tr><tr><td class="codekolom">2679</td><td class="codekolom">2725</td><td class="bredecode"> }</td></tr><tr><td class="codekolom">2680</td><td class="codekolom">2726</td><td class="bredecode"> </td></tr><tr><td class="codekolom">2681</td><td class="codekolom">2727</td><td class="bredecode"> /**</td></tr><tr><td class="codekolom">2682</td><td class="codekolom">2728</td><td class="bredecode"> * Creates an array of values by running each element in the `collection`</td></tr><tr><td class="codekolom">2683</td><td class="codekolom">2729</td><td class="bredecode"> * through the `callback`. The `callback` is bound to `thisArg` and invoked with</td></tr><tr><td class="codekolom">2684</td><td class="codekolom">2730</td><td class="bredecode"> * three arguments; (value, index|key, collection).</td></tr><tr><td class="codekolom">2685</td><td class="codekolom">2731</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">2686</td><td class="codekolom">2732</td><td class="bredecode"> * If a property name is passed for `callback`, the created "_.pluck" style</td></tr><tr><td class="codekolom">2687</td><td class="codekolom">2733</td><td class="bredecode"> * callback will return the property value of the given element.</td></tr><tr><td class="codekolom">2688</td><td class="codekolom">2734</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">2689</td><td class="codekolom">2735</td><td class="bredecode"> * If an object is passed for `callback`, the created "_.where" style callback</td></tr><tr><td class="codekolom">2690</td><td class="codekolom">2736</td><td class="bredecode"> * will return `true` for elements that have the properties of the given object,</td></tr><tr><td class="codekolom">2691</td><td class="codekolom">2737</td><td class="bredecode"> * else `false`.</td></tr><tr><td class="codekolom">2692</td><td class="codekolom">2738</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">2693</td><td class="codekolom">2739</td><td class="bredecode"> * @static</td></tr><tr><td class="codekolom">2694</td><td class="codekolom">2740</td><td class="bredecode"> * @memberOf _</td></tr><tr><td class="codekolom">2695</td><td class="codekolom">2741</td><td class="bredecode"> * @alias collect</td></tr><tr><td class="codekolom">2696</td><td class="codekolom">2742</td><td class="bredecode"> * @category Collections</td></tr><tr><td class="codekolom">2697</td><td class="codekolom">2743</td><td class="bredecode"> * @param {Array|Object|String} collection The collection to iterate over.</td></tr><tr><td class="codekolom">2698</td><td class="codekolom">2744</td><td class="bredecode"> * @param {Function|Object|String} [callback=identity] The function called per</td></tr><tr><td class="codekolom">2699</td><td class="codekolom">2745</td><td class="bredecode"> * iteration. If a property name or object is passed, it will be used to create</td></tr><tr><td class="codekolom">2700</td><td class="codekolom">2746</td><td class="bredecode"> * a "_.pluck" or "_.where" style callback, respectively.</td></tr><tr><td class="codekolom">2701</td><td class="codekolom">2747</td><td class="bredecode"> * @param {Mixed} [thisArg] The `this` binding of `callback`.</td></tr><tr><td class="codekolom">2702</td><td class="codekolom">2748</td><td class="bredecode"> * @returns {Array} Returns a new array of the results of each `callback` execution.</td></tr><tr><td class="codekolom">2703</td><td class="codekolom">2749</td><td class="bredecode"> * @example</td></tr><tr><td class="codekolom">2704</td><td class="codekolom">2750</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">2705</td><td class="codekolom">2751</td><td class="bredecode"> * _.map([1, 2, 3], function(num) { return num * 3; });</td></tr><tr><td class="codekolom">2706</td><td class="codekolom">2752</td><td class="bredecode"> * // =&gt; [3, 6, 9]</td></tr><tr><td class="codekolom">2707</td><td class="codekolom">2753</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">2708</td><td class="codekolom">2754</td><td class="bredecode"> * _.map({ 'one': 1, 'two': 2, 'three': 3 }, function(num) { return num * 3; });</td></tr><tr><td class="codekolom">2709</td><td class="codekolom">2755</td><td class="bredecode"> * // =&gt; [3, 6, 9] (order is not guaranteed)</td></tr><tr><td class="codekolom">2710</td><td class="codekolom">2756</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">2711</td><td class="codekolom">2757</td><td class="bredecode"> * var stooges = [</td></tr><tr><td class="codekolom">2712</td><td class="codekolom">2758</td><td class="bredecode"> * { 'name': 'moe', 'age': 40 },</td></tr><tr><td class="codekolom">2713</td><td class="codekolom">2759</td><td class="bredecode"> * { 'name': 'larry', 'age': 50 }</td></tr><tr><td class="codekolom">2714</td><td class="codekolom">2760</td><td class="bredecode"> * ];</td></tr><tr><td class="codekolom">2715</td><td class="codekolom">2761</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">2716</td><td class="codekolom">2762</td><td class="bredecode"> * // using "_.pluck" callback shorthand</td></tr><tr><td class="codekolom">2717</td><td class="codekolom">2763</td><td class="bredecode"> * _.map(stooges, 'name');</td></tr><tr><td class="codekolom">2718</td><td class="codekolom">2764</td><td class="bredecode"> * // =&gt; ['moe', 'larry']</td></tr><tr><td class="codekolom">2719</td><td class="codekolom">2765</td><td class="bredecode"> */</td></tr><tr class="del"><td class="codekolom">2720</td><td class="codekolom"></td><td class="bredecode">- function map(collection, callback, thisArg) {</td></tr><tr class="add"><td class="codekolom"></td><td class="codekolom">2766</td><td class="bredecode">+ var map = function map(callback, collection, thisArg) {</td></tr><tr><td class="codekolom">2721</td><td class="codekolom">2767</td><td class="bredecode"> var index = -1,</td></tr><tr><td class="codekolom">2722</td><td class="codekolom">2768</td><td class="bredecode"> length = collection ? collection.length : 0;</td></tr><tr><td class="codekolom">2723</td><td class="codekolom">2769</td><td class="bredecode"> </td></tr><tr><td class="codekolom">2724</td><td class="codekolom">2770</td><td class="bredecode"> callback = lodash.createCallback(callback, thisArg);</td></tr><tr><td class="codekolom">2725</td><td class="codekolom">2771</td><td class="bredecode"> if (typeof length == 'number') {</td></tr><tr><td class="codekolom">2726</td><td class="codekolom">2772</td><td class="bredecode"> var result = Array(length);</td></tr><tr><td class="codekolom">2727</td><td class="codekolom">2773</td><td class="bredecode"> while (++index &lt; length) {</td></tr><tr><td class="codekolom">2728</td><td class="codekolom">2774</td><td class="bredecode"> result[index] = callback(collection[index], index, collection);</td></tr><tr><td class="codekolom">2729</td><td class="codekolom">2775</td><td class="bredecode"> }</td></tr><tr><td class="codekolom">2730</td><td class="codekolom">2776</td><td class="bredecode"> } else {</td></tr><tr><td class="codekolom">2731</td><td class="codekolom">2777</td><td class="bredecode"> result = [];</td></tr><tr><td class="codekolom">2732</td><td class="codekolom">2778</td><td class="bredecode"> forOwn(collection, function(value, key, collection) {</td></tr><tr><td class="codekolom">2733</td><td class="codekolom">2779</td><td class="bredecode"> result[++index] = callback(value, key, collection);</td></tr><tr><td class="codekolom">2734</td><td class="codekolom">2780</td><td class="bredecode"> });</td></tr><tr><td class="codekolom">2735</td><td class="codekolom">2781</td><td class="bredecode"> }</td></tr><tr><td class="codekolom">2736</td><td class="codekolom">2782</td><td class="bredecode"> return result;</td></tr><tr class="del"><td class="codekolom">2737</td><td class="codekolom"></td><td class="bredecode">- }</td></tr><tr class="add"><td class="codekolom"></td><td class="codekolom">2783</td><td class="bredecode">+ }.autoCurry(2);</td></tr><tr><td class="codekolom">2738</td><td class="codekolom">2784</td><td class="bredecode"> </td></tr><tr><td class="codekolom">2739</td><td class="codekolom">2785</td><td class="bredecode"> /**</td></tr><tr><td class="codekolom">2740</td><td class="codekolom">2786</td><td class="bredecode"> * Retrieves the maximum value of an `array`. If `callback` is passed,</td></tr><tr><td class="codekolom">2741</td><td class="codekolom">2787</td><td class="bredecode"> * it will be executed for each value in the `array` to generate the</td></tr><tr><td class="codekolom">2742</td><td class="codekolom">2788</td><td class="bredecode"> * criterion by which the value is ranked. The `callback` is bound to</td></tr><tr><td class="codekolom">2743</td><td class="codekolom">2789</td><td class="bredecode"> * `thisArg` and invoked with three arguments; (value, index, collection).</td></tr><tr><td class="codekolom">2744</td><td class="codekolom">2790</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">2745</td><td class="codekolom">2791</td><td class="bredecode"> * If a property name is passed for `callback`, the created "_.pluck" style</td></tr><tr><td class="codekolom">2746</td><td class="codekolom">2792</td><td class="bredecode"> * callback will return the property value of the given element.</td></tr><tr><td class="codekolom">2747</td><td class="codekolom">2793</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">2748</td><td class="codekolom">2794</td><td class="bredecode"> * If an object is passed for `callback`, the created "_.where" style callback</td></tr><tr><td class="codekolom">2749</td><td class="codekolom">2795</td><td class="bredecode"> * will return `true` for elements that have the properties of the given object,</td></tr><tr><td class="codekolom">2750</td><td class="codekolom">2796</td><td class="bredecode"> * else `false`.</td></tr><tr><td class="codekolom">2751</td><td class="codekolom">2797</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">2752</td><td class="codekolom">2798</td><td class="bredecode"> * @static</td></tr><tr><td class="codekolom">2753</td><td class="codekolom">2799</td><td class="bredecode"> * @memberOf _</td></tr><tr><td class="codekolom">2754</td><td class="codekolom">2800</td><td class="bredecode"> * @category Collections</td></tr><tr><td class="codekolom">2755</td><td class="codekolom">2801</td><td class="bredecode"> * @param {Array|Object|String} collection The collection to iterate over.</td></tr><tr><td class="codekolom">2756</td><td class="codekolom">2802</td><td class="bredecode"> * @param {Function|Object|String} [callback=identity] The function called per</td></tr><tr><td class="codekolom">2757</td><td class="codekolom">2803</td><td class="bredecode"> * iteration. If a property name or object is passed, it will be used to create</td></tr><tr><td class="codekolom">2758</td><td class="codekolom">2804</td><td class="bredecode"> * a "_.pluck" or "_.where" style callback, respectively.</td></tr><tr><td class="codekolom">2759</td><td class="codekolom">2805</td><td class="bredecode"> * @param {Mixed} [thisArg] The `this` binding of `callback`.</td></tr><tr><td class="codekolom">2760</td><td class="codekolom">2806</td><td class="bredecode"> * @returns {Mixed} Returns the maximum value.</td></tr><tr><td class="codekolom">2761</td><td class="codekolom">2807</td><td class="bredecode"> * @example</td></tr><tr><td class="codekolom">2762</td><td class="codekolom">2808</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">2763</td><td class="codekolom">2809</td><td class="bredecode"> * _.max([4, 2, 8, 6]);</td></tr><tr><td class="codekolom">2764</td><td class="codekolom">2810</td><td class="bredecode"> * // =&gt; 8</td></tr><tr><td class="codekolom">2765</td><td class="codekolom">2811</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">2766</td><td class="codekolom">2812</td><td class="bredecode"> * var stooges = [</td></tr><tr><td class="codekolom">2767</td><td class="codekolom">2813</td><td class="bredecode"> * { 'name': 'moe', 'age': 40 },</td></tr><tr><td class="codekolom">2768</td><td class="codekolom">2814</td><td class="bredecode"> * { 'name': 'larry', 'age': 50 }</td></tr><tr><td class="codekolom">2769</td><td class="codekolom">2815</td><td class="bredecode"> * ];</td></tr><tr><td class="codekolom">2770</td><td class="codekolom">2816</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">2771</td><td class="codekolom">2817</td><td class="bredecode"> * _.max(stooges, function(stooge) { return stooge.age; });</td></tr><tr><td class="codekolom">2772</td><td class="codekolom">2818</td><td class="bredecode"> * // =&gt; { 'name': 'larry', 'age': 50 };</td></tr><tr><td class="codekolom">2773</td><td class="codekolom">2819</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">2774</td><td class="codekolom">2820</td><td class="bredecode"> * // using "_.pluck" callback shorthand</td></tr><tr><td class="codekolom">2775</td><td class="codekolom">2821</td><td class="bredecode"> * _.max(stooges, 'age');</td></tr><tr><td class="codekolom">2776</td><td class="codekolom">2822</td><td class="bredecode"> * // =&gt; { 'name': 'larry', 'age': 50 };</td></tr><tr><td class="codekolom">2777</td><td class="codekolom">2823</td><td class="bredecode"> */</td></tr><tr class="del"><td class="codekolom">2778</td><td class="codekolom"></td><td class="bredecode">- function max(collection, callback, thisArg) {</td></tr><tr class="add"><td class="codekolom"></td><td class="codekolom">2824</td><td class="bredecode">+ var max = function max(callback, collection, thisArg) {</td></tr><tr><td class="codekolom">2779</td><td class="codekolom">2825</td><td class="bredecode"> var computed = -Infinity,</td></tr><tr><td class="codekolom">2780</td><td class="codekolom">2826</td><td class="bredecode"> result = computed;</td></tr><tr><td class="codekolom">2781</td><td class="codekolom">2827</td><td class="bredecode"> </td></tr><tr><td class="codekolom">2782</td><td class="codekolom">2828</td><td class="bredecode"> if (!callback &amp;&amp; isArray(collection)) {</td></tr><tr><td class="codekolom">2783</td><td class="codekolom">2829</td><td class="bredecode"> var index = -1,</td></tr><tr><td class="codekolom">2784</td><td class="codekolom">2830</td><td class="bredecode"> length = collection.length;</td></tr><tr><td class="codekolom">2785</td><td class="codekolom">2831</td><td class="bredecode"> </td></tr><tr><td class="codekolom">2786</td><td class="codekolom">2832</td><td class="bredecode"> while (++index &lt; length) {</td></tr><tr><td class="codekolom">2787</td><td class="codekolom">2833</td><td class="bredecode"> var value = collection[index];</td></tr><tr><td class="codekolom">2788</td><td class="codekolom">2834</td><td class="bredecode"> if (value &gt; result) {</td></tr><tr><td class="codekolom">2789</td><td class="codekolom">2835</td><td class="bredecode"> result = value;</td></tr><tr><td class="codekolom">2790</td><td class="codekolom">2836</td><td class="bredecode"> }</td></tr><tr><td class="codekolom">2791</td><td class="codekolom">2837</td><td class="bredecode"> }</td></tr><tr><td class="codekolom">2792</td><td class="codekolom">2838</td><td class="bredecode"> } else {</td></tr><tr><td class="codekolom">2793</td><td class="codekolom">2839</td><td class="bredecode"> callback = (!callback &amp;&amp; isString(collection))</td></tr><tr><td class="codekolom">2794</td><td class="codekolom">2840</td><td class="bredecode"> ? charAtCallback</td></tr><tr><td class="codekolom">2795</td><td class="codekolom">2841</td><td class="bredecode"> : lodash.createCallback(callback, thisArg);</td></tr><tr><td class="codekolom">2796</td><td class="codekolom">2842</td><td class="bredecode"> </td></tr><tr class="del"><td class="codekolom">2797</td><td class="codekolom"></td><td class="bredecode">- forEach(collection, function(value, index, collection) {</td></tr><tr class="add"><td class="codekolom"></td><td class="codekolom">2843</td><td class="bredecode">+ forEach(function(value, index, collection) {</td></tr><tr><td class="codekolom">2798</td><td class="codekolom">2844</td><td class="bredecode"> var current = callback(value, index, collection);</td></tr><tr><td class="codekolom">2799</td><td class="codekolom">2845</td><td class="bredecode"> if (current &gt; computed) {</td></tr><tr><td class="codekolom">2800</td><td class="codekolom">2846</td><td class="bredecode"> computed = current;</td></tr><tr><td class="codekolom">2801</td><td class="codekolom">2847</td><td class="bredecode"> result = value;</td></tr><tr><td class="codekolom">2802</td><td class="codekolom">2848</td><td class="bredecode"> }</td></tr><tr class="del"><td class="codekolom">2803</td><td class="codekolom"></td><td class="bredecode">- });</td></tr><tr class="add"><td class="codekolom"></td><td class="codekolom">2849</td><td class="bredecode">+ }, collection);</td></tr><tr><td class="codekolom">2804</td><td class="codekolom">2850</td><td class="bredecode"> }</td></tr><tr><td class="codekolom">2805</td><td class="codekolom">2851</td><td class="bredecode"> return result;</td></tr><tr class="del"><td class="codekolom">2806</td><td class="codekolom"></td><td class="bredecode">- }</td></tr><tr class="add"><td class="codekolom"></td><td class="codekolom">2852</td><td class="bredecode">+ }.autoCurry(2);</td></tr><tr><td class="codekolom">2807</td><td class="codekolom">2853</td><td class="bredecode"> </td></tr><tr><td class="codekolom">2808</td><td class="codekolom">2854</td><td class="bredecode"> /**</td></tr><tr><td class="codekolom">2809</td><td class="codekolom">2855</td><td class="bredecode"> * Retrieves the minimum value of an `array`. If `callback` is passed,</td></tr><tr><td class="codekolom">2810</td><td class="codekolom">2856</td><td class="bredecode"> * it will be executed for each value in the `array` to generate the</td></tr><tr><td class="codekolom">2811</td><td class="codekolom">2857</td><td class="bredecode"> * criterion by which the value is ranked. The `callback` is bound to `thisArg`</td></tr><tr><td class="codekolom">2812</td><td class="codekolom">2858</td><td class="bredecode"> * and invoked with three arguments; (value, index, collection).</td></tr><tr><td class="codekolom">2813</td><td class="codekolom">2859</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">2814</td><td class="codekolom">2860</td><td class="bredecode"> * If a property name is passed for `callback`, the created "_.pluck" style</td></tr><tr><td class="codekolom">2815</td><td class="codekolom">2861</td><td class="bredecode"> * callback will return the property value of the given element.</td></tr><tr><td class="codekolom">2816</td><td class="codekolom">2862</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">2817</td><td class="codekolom">2863</td><td class="bredecode"> * If an object is passed for `callback`, the created "_.where" style callback</td></tr><tr><td class="codekolom">2818</td><td class="codekolom">2864</td><td class="bredecode"> * will return `true` for elements that have the properties of the given object,</td></tr><tr><td class="codekolom">2819</td><td class="codekolom">2865</td><td class="bredecode"> * else `false`.</td></tr><tr><td class="codekolom">2820</td><td class="codekolom">2866</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">2821</td><td class="codekolom">2867</td><td class="bredecode"> * @static</td></tr><tr><td class="codekolom">2822</td><td class="codekolom">2868</td><td class="bredecode"> * @memberOf _</td></tr><tr><td class="codekolom">2823</td><td class="codekolom">2869</td><td class="bredecode"> * @category Collections</td></tr><tr><td class="codekolom">2824</td><td class="codekolom">2870</td><td class="bredecode"> * @param {Array|Object|String} collection The collection to iterate over.</td></tr><tr><td class="codekolom">2825</td><td class="codekolom">2871</td><td class="bredecode"> * @param {Function|Object|String} [callback=identity] The function called per</td></tr><tr><td class="codekolom">2826</td><td class="codekolom">2872</td><td class="bredecode"> * iteration. If a property name or object is passed, it will be used to create</td></tr><tr><td class="codekolom">2827</td><td class="codekolom">2873</td><td class="bredecode"> * a "_.pluck" or "_.where" style callback, respectively.</td></tr><tr><td class="codekolom">2828</td><td class="codekolom">2874</td><td class="bredecode"> * @param {Mixed} [thisArg] The `this` binding of `callback`.</td></tr><tr><td class="codekolom">2829</td><td class="codekolom">2875</td><td class="bredecode"> * @returns {Mixed} Returns the minimum value.</td></tr><tr><td class="codekolom">2830</td><td class="codekolom">2876</td><td class="bredecode"> * @example</td></tr><tr><td class="codekolom">2831</td><td class="codekolom">2877</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">2832</td><td class="codekolom">2878</td><td class="bredecode"> * _.min([4, 2, 8, 6]);</td></tr><tr><td class="codekolom">2833</td><td class="codekolom">2879</td><td class="bredecode"> * // =&gt; 2</td></tr><tr><td class="codekolom">2834</td><td class="codekolom">2880</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">2835</td><td class="codekolom">2881</td><td class="bredecode"> * var stooges = [</td></tr><tr><td class="codekolom">2836</td><td class="codekolom">2882</td><td class="bredecode"> * { 'name': 'moe', 'age': 40 },</td></tr><tr><td class="codekolom">2837</td><td class="codekolom">2883</td><td class="bredecode"> * { 'name': 'larry', 'age': 50 }</td></tr><tr><td class="codekolom">2838</td><td class="codekolom">2884</td><td class="bredecode"> * ];</td></tr><tr><td class="codekolom">2839</td><td class="codekolom">2885</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">2840</td><td class="codekolom">2886</td><td class="bredecode"> * _.min(stooges, function(stooge) { return stooge.age; });</td></tr><tr><td class="codekolom">2841</td><td class="codekolom">2887</td><td class="bredecode"> * // =&gt; { 'name': 'moe', 'age': 40 };</td></tr><tr><td class="codekolom">2842</td><td class="codekolom">2888</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">2843</td><td class="codekolom">2889</td><td class="bredecode"> * // using "_.pluck" callback shorthand</td></tr><tr><td class="codekolom">2844</td><td class="codekolom">2890</td><td class="bredecode"> * _.min(stooges, 'age');</td></tr><tr><td class="codekolom">2845</td><td class="codekolom">2891</td><td class="bredecode"> * // =&gt; { 'name': 'moe', 'age': 40 };</td></tr><tr><td class="codekolom">2846</td><td class="codekolom">2892</td><td class="bredecode"> */</td></tr><tr class="del"><td class="codekolom">2847</td><td class="codekolom"></td><td class="bredecode">- function min(collection, callback, thisArg) {</td></tr><tr class="add"><td class="codekolom"></td><td class="codekolom">2893</td><td class="bredecode">+ var min = function min(callback, collection, thisArg) {</td></tr><tr><td class="codekolom">2848</td><td class="codekolom">2894</td><td class="bredecode"> var computed = Infinity,</td></tr><tr><td class="codekolom">2849</td><td class="codekolom">2895</td><td class="bredecode"> result = computed;</td></tr><tr><td class="codekolom">2850</td><td class="codekolom">2896</td><td class="bredecode"> </td></tr><tr><td class="codekolom">2851</td><td class="codekolom">2897</td><td class="bredecode"> if (!callback &amp;&amp; isArray(collection)) {</td></tr><tr><td class="codekolom">2852</td><td class="codekolom">2898</td><td class="bredecode"> var index = -1,</td></tr><tr><td class="codekolom">2853</td><td class="codekolom">2899</td><td class="bredecode"> length = collection.length;</td></tr><tr><td class="codekolom">2854</td><td class="codekolom">2900</td><td class="bredecode"> </td></tr><tr><td class="codekolom">2855</td><td class="codekolom">2901</td><td class="bredecode"> while (++index &lt; length) {</td></tr><tr><td class="codekolom">2856</td><td class="codekolom">2902</td><td class="bredecode"> var value = collection[index];</td></tr><tr><td class="codekolom">2857</td><td class="codekolom">2903</td><td class="bredecode"> if (value &lt; result) {</td></tr><tr><td class="codekolom">2858</td><td class="codekolom">2904</td><td class="bredecode"> result = value;</td></tr><tr><td class="codekolom">2859</td><td class="codekolom">2905</td><td class="bredecode"> }</td></tr><tr><td class="codekolom">2860</td><td class="codekolom">2906</td><td class="bredecode"> }</td></tr><tr><td class="codekolom">2861</td><td class="codekolom">2907</td><td class="bredecode"> } else {</td></tr><tr><td class="codekolom">2862</td><td class="codekolom">2908</td><td class="bredecode"> callback = (!callback &amp;&amp; isString(collection))</td></tr><tr><td class="codekolom">2863</td><td class="codekolom">2909</td><td class="bredecode"> ? charAtCallback</td></tr><tr><td class="codekolom">2864</td><td class="codekolom">2910</td><td class="bredecode"> : lodash.createCallback(callback, thisArg);</td></tr><tr><td class="codekolom">2865</td><td class="codekolom">2911</td><td class="bredecode"> </td></tr><tr class="del"><td class="codekolom">2866</td><td class="codekolom"></td><td class="bredecode">- forEach(collection, function(value, index, collection) {</td></tr><tr class="add"><td class="codekolom"></td><td class="codekolom">2912</td><td class="bredecode">+ forEach(function(value, index, collection) {</td></tr><tr><td class="codekolom">2867</td><td class="codekolom">2913</td><td class="bredecode"> var current = callback(value, index, collection);</td></tr><tr><td class="codekolom">2868</td><td class="codekolom">2914</td><td class="bredecode"> if (current &lt; computed) {</td></tr><tr><td class="codekolom">2869</td><td class="codekolom">2915</td><td class="bredecode"> computed = current;</td></tr><tr><td class="codekolom">2870</td><td class="codekolom">2916</td><td class="bredecode"> result = value;</td></tr><tr><td class="codekolom">2871</td><td class="codekolom">2917</td><td class="bredecode"> }</td></tr><tr class="del"><td class="codekolom">2872</td><td class="codekolom"></td><td class="bredecode">- });</td></tr><tr class="add"><td class="codekolom"></td><td class="codekolom">2918</td><td class="bredecode">+ }, collection);</td></tr><tr><td class="codekolom">2873</td><td class="codekolom">2919</td><td class="bredecode"> }</td></tr><tr><td class="codekolom">2874</td><td class="codekolom">2920</td><td class="bredecode"> return result;</td></tr><tr class="del"><td class="codekolom">2875</td><td class="codekolom"></td><td class="bredecode">- }</td></tr><tr class="add"><td class="codekolom"></td><td class="codekolom">2921</td><td class="bredecode">+ }.autoCurry(2);</td></tr><tr><td class="codekolom">2876</td><td class="codekolom">2922</td><td class="bredecode"> </td></tr><tr><td class="codekolom">2877</td><td class="codekolom">2923</td><td class="bredecode"> /**</td></tr><tr><td class="codekolom">2878</td><td class="codekolom">2924</td><td class="bredecode"> * Retrieves the value of a specified property from all elements in the `collection`.</td></tr><tr><td class="codekolom">2879</td><td class="codekolom">2925</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">2880</td><td class="codekolom">2926</td><td class="bredecode"> * @static</td></tr><tr><td class="codekolom">2881</td><td class="codekolom">2927</td><td class="bredecode"> * @memberOf _</td></tr><tr><td class="codekolom">2882</td><td class="codekolom">2928</td><td class="bredecode"> * @type Function</td></tr><tr><td class="codekolom">2883</td><td class="codekolom">2929</td><td class="bredecode"> * @category Collections</td></tr><tr><td class="codekolom">2884</td><td class="codekolom">2930</td><td class="bredecode"> * @param {Array|Object|String} collection The collection to iterate over.</td></tr><tr><td class="codekolom">2885</td><td class="codekolom">2931</td><td class="bredecode"> * @param {String} property The property to pluck.</td></tr><tr><td class="codekolom">2886</td><td class="codekolom">2932</td><td class="bredecode"> * @returns {Array} Returns a new array of property values.</td></tr><tr><td class="codekolom">2887</td><td class="codekolom">2933</td><td class="bredecode"> * @example</td></tr><tr><td class="codekolom">2888</td><td class="codekolom">2934</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">2889</td><td class="codekolom">2935</td><td class="bredecode"> * var stooges = [</td></tr><tr><td class="codekolom">2890</td><td class="codekolom">2936</td><td class="bredecode"> * { 'name': 'moe', 'age': 40 },</td></tr><tr><td class="codekolom">2891</td><td class="codekolom">2937</td><td class="bredecode"> * { 'name': 'larry', 'age': 50 }</td></tr><tr><td class="codekolom">2892</td><td class="codekolom">2938</td><td class="bredecode"> * ];</td></tr><tr><td class="codekolom">2893</td><td class="codekolom">2939</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">2894</td><td class="codekolom">2940</td><td class="bredecode"> * _.pluck(stooges, 'name');</td></tr><tr><td class="codekolom">2895</td><td class="codekolom">2941</td><td class="bredecode"> * // =&gt; ['moe', 'larry']</td></tr><tr><td class="codekolom">2896</td><td class="codekolom">2942</td><td class="bredecode"> */</td></tr><tr class="del"><td class="codekolom">2897</td><td class="codekolom"></td><td class="bredecode">- function pluck(collection, property) {</td></tr><tr class="add"><td class="codekolom"></td><td class="codekolom">2943</td><td class="bredecode">+ var pluck = function pluck(property, collection) {</td></tr><tr><td class="codekolom">2898</td><td class="codekolom">2944</td><td class="bredecode"> var index = -1,</td></tr><tr><td class="codekolom">2899</td><td class="codekolom">2945</td><td class="bredecode"> length = collection ? collection.length : 0;</td></tr><tr><td class="codekolom">2900</td><td class="codekolom">2946</td><td class="bredecode"> </td></tr><tr><td class="codekolom">2901</td><td class="codekolom">2947</td><td class="bredecode"> if (typeof length == 'number') {</td></tr><tr><td class="codekolom">2902</td><td class="codekolom">2948</td><td class="bredecode"> var result = Array(length);</td></tr><tr><td class="codekolom">2903</td><td class="codekolom">2949</td><td class="bredecode"> while (++index &lt; length) {</td></tr><tr><td class="codekolom">2904</td><td class="codekolom">2950</td><td class="bredecode"> result[index] = collection[index][property];</td></tr><tr><td class="codekolom">2905</td><td class="codekolom">2951</td><td class="bredecode"> }</td></tr><tr><td class="codekolom">2906</td><td class="codekolom">2952</td><td class="bredecode"> }</td></tr><tr class="del"><td class="codekolom">2907</td><td class="codekolom"></td><td class="bredecode">- return result || map(collection, property);</td></tr><tr class="del"><td class="codekolom">2908</td><td class="codekolom"></td><td class="bredecode">- }</td></tr><tr class="add"><td class="codekolom"></td><td class="codekolom">2953</td><td class="bredecode">+ return result || map(property, collection);</td></tr><tr class="add"><td class="codekolom"></td><td class="codekolom">2954</td><td class="bredecode">+ }.autoCurry();</td></tr><tr><td class="codekolom">2909</td><td class="codekolom">2955</td><td class="bredecode"> </td></tr><tr><td class="codekolom">2910</td><td class="codekolom">2956</td><td class="bredecode"> /**</td></tr><tr><td class="codekolom">2911</td><td class="codekolom">2957</td><td class="bredecode"> * Reduces a `collection` to a value which is the accumulated result of running</td></tr><tr><td class="codekolom">2912</td><td class="codekolom">2958</td><td class="bredecode"> * each element in the `collection` through the `callback`, where each successive</td></tr><tr><td class="codekolom">2913</td><td class="codekolom">2959</td><td class="bredecode"> * `callback` execution consumes the return value of the previous execution.</td></tr><tr><td class="codekolom">2914</td><td class="codekolom">2960</td><td class="bredecode"> * If `accumulator` is not passed, the first element of the `collection` will be</td></tr><tr><td class="codekolom">2915</td><td class="codekolom">2961</td><td class="bredecode"> * used as the initial `accumulator` value. The `callback` is bound to `thisArg`</td></tr><tr><td class="codekolom">2916</td><td class="codekolom">2962</td><td class="bredecode"> * and invoked with four arguments; (accumulator, value, index|key, collection).</td></tr><tr><td class="codekolom">2917</td><td class="codekolom">2963</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">2918</td><td class="codekolom">2964</td><td class="bredecode"> * @static</td></tr><tr><td class="codekolom">2919</td><td class="codekolom">2965</td><td class="bredecode"> * @memberOf _</td></tr><tr><td class="codekolom">2920</td><td class="codekolom">2966</td><td class="bredecode"> * @alias foldl, inject</td></tr><tr><td class="codekolom">2921</td><td class="codekolom">2967</td><td class="bredecode"> * @category Collections</td></tr><tr><td class="codekolom">2922</td><td class="codekolom">2968</td><td class="bredecode"> * @param {Array|Object|String} collection The collection to iterate over.</td></tr><tr><td class="codekolom">2923</td><td class="codekolom">2969</td><td class="bredecode"> * @param {Function} [callback=identity] The function called per iteration.</td></tr><tr><td class="codekolom">2924</td><td class="codekolom">2970</td><td class="bredecode"> * @param {Mixed} [accumulator] Initial value of the accumulator.</td></tr><tr><td class="codekolom">2925</td><td class="codekolom">2971</td><td class="bredecode"> * @param {Mixed} [thisArg] The `this` binding of `callback`.</td></tr><tr><td class="codekolom">2926</td><td class="codekolom">2972</td><td class="bredecode"> * @returns {Mixed} Returns the accumulated value.</td></tr><tr><td class="codekolom">2927</td><td class="codekolom">2973</td><td class="bredecode"> * @example</td></tr><tr><td class="codekolom">2928</td><td class="codekolom">2974</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">2929</td><td class="codekolom">2975</td><td class="bredecode"> * var sum = _.reduce([1, 2, 3], function(sum, num) {</td></tr><tr><td class="codekolom">2930</td><td class="codekolom">2976</td><td class="bredecode"> * return sum + num;</td></tr><tr><td class="codekolom">2931</td><td class="codekolom">2977</td><td class="bredecode"> * });</td></tr><tr><td class="codekolom">2932</td><td class="codekolom">2978</td><td class="bredecode"> * // =&gt; 6</td></tr><tr><td class="codekolom">2933</td><td class="codekolom">2979</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">2934</td><td class="codekolom">2980</td><td class="bredecode"> * var mapped = _.reduce({ 'a': 1, 'b': 2, 'c': 3 }, function(result, num, key) {</td></tr><tr><td class="codekolom">2935</td><td class="codekolom">2981</td><td class="bredecode"> * result[key] = num * 3;</td></tr><tr><td class="codekolom">2936</td><td class="codekolom">2982</td><td class="bredecode"> * return result;</td></tr><tr><td class="codekolom">2937</td><td class="codekolom">2983</td><td class="bredecode"> * }, {});</td></tr><tr><td class="codekolom">2938</td><td class="codekolom">2984</td><td class="bredecode"> * // =&gt; { 'a': 3, 'b': 6, 'c': 9 }</td></tr><tr><td class="codekolom">2939</td><td class="codekolom">2985</td><td class="bredecode"> */</td></tr><tr class="del"><td class="codekolom">2940</td><td class="codekolom"></td><td class="bredecode">- function reduce(collection, callback, accumulator, thisArg) {</td></tr><tr class="add"><td class="codekolom"></td><td class="codekolom">2986</td><td class="bredecode">+ var reduce = function reduce(callback, accumulator, collection, thisArg) {</td></tr><tr><td class="codekolom">2941</td><td class="codekolom">2987</td><td class="bredecode"> if (!collection) return accumulator;</td></tr><tr><td class="codekolom">2942</td><td class="codekolom">2988</td><td class="bredecode"> var noaccum = arguments.length &lt; 3;</td></tr><tr><td class="codekolom">2943</td><td class="codekolom">2989</td><td class="bredecode"> callback = lodash.createCallback(callback, thisArg, 4);</td></tr><tr><td class="codekolom">2944</td><td class="codekolom">2990</td><td class="bredecode"> </td></tr><tr><td class="codekolom">2945</td><td class="codekolom">2991</td><td class="bredecode"> var index = -1,</td></tr><tr><td class="codekolom">2946</td><td class="codekolom">2992</td><td class="bredecode"> length = collection.length;</td></tr><tr><td class="codekolom">2947</td><td class="codekolom">2993</td><td class="bredecode"> </td></tr><tr><td class="codekolom">2948</td><td class="codekolom">2994</td><td class="bredecode"> if (typeof length == 'number') {</td></tr><tr><td class="codekolom">2949</td><td class="codekolom">2995</td><td class="bredecode"> if (noaccum) {</td></tr><tr><td class="codekolom">2950</td><td class="codekolom">2996</td><td class="bredecode"> accumulator = collection[++index];</td></tr><tr><td class="codekolom">2951</td><td class="codekolom">2997</td><td class="bredecode"> }</td></tr><tr><td class="codekolom">2952</td><td class="codekolom">2998</td><td class="bredecode"> while (++index &lt; length) {</td></tr><tr><td class="codekolom">2953</td><td class="codekolom">2999</td><td class="bredecode"> accumulator = callback(accumulator, collection[index], index, collection);</td></tr><tr><td class="codekolom">2954</td><td class="codekolom">3000</td><td class="bredecode"> }</td></tr><tr><td class="codekolom">2955</td><td class="codekolom">3001</td><td class="bredecode"> } else {</td></tr><tr><td class="codekolom">2956</td><td class="codekolom">3002</td><td class="bredecode"> forOwn(collection, function(value, index, collection) {</td></tr><tr><td class="codekolom">2957</td><td class="codekolom">3003</td><td class="bredecode"> accumulator = noaccum</td></tr><tr><td class="codekolom">2958</td><td class="codekolom">3004</td><td class="bredecode"> ? (noaccum = false, value)</td></tr><tr><td class="codekolom">2959</td><td class="codekolom">3005</td><td class="bredecode"> : callback(accumulator, value, index, collection)</td></tr><tr><td class="codekolom">2960</td><td class="codekolom">3006</td><td class="bredecode"> });</td></tr><tr><td class="codekolom">2961</td><td class="codekolom">3007</td><td class="bredecode"> }</td></tr><tr><td class="codekolom">2962</td><td class="codekolom">3008</td><td class="bredecode"> return accumulator;</td></tr><tr class="del"><td class="codekolom">2963</td><td class="codekolom"></td><td class="bredecode">- }</td></tr><tr class="add"><td class="codekolom"></td><td class="codekolom">3009</td><td class="bredecode">+ }.autoCurry(3);</td></tr><tr><td class="codekolom">2964</td><td class="codekolom">3010</td><td class="bredecode"> </td></tr><tr><td class="codekolom">2965</td><td class="codekolom">3011</td><td class="bredecode"> /**</td></tr><tr><td class="codekolom">2966</td><td class="codekolom">3012</td><td class="bredecode"> * This method is similar to `_.reduce`, except that it iterates over a</td></tr><tr><td class="codekolom">2967</td><td class="codekolom">3013</td><td class="bredecode"> * `collection` from right to left.</td></tr><tr><td class="codekolom">2968</td><td class="codekolom">3014</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">2969</td><td class="codekolom">3015</td><td class="bredecode"> * @static</td></tr><tr><td class="codekolom">2970</td><td class="codekolom">3016</td><td class="bredecode"> * @memberOf _</td></tr><tr><td class="codekolom">2971</td><td class="codekolom">3017</td><td class="bredecode"> * @alias foldr</td></tr><tr><td class="codekolom">2972</td><td class="codekolom">3018</td><td class="bredecode"> * @category Collections</td></tr><tr><td class="codekolom">2973</td><td class="codekolom">3019</td><td class="bredecode"> * @param {Array|Object|String} collection The collection to iterate over.</td></tr><tr><td class="codekolom">2974</td><td class="codekolom">3020</td><td class="bredecode"> * @param {Function} [callback=identity] The function called per iteration.</td></tr><tr><td class="codekolom">2975</td><td class="codekolom">3021</td><td class="bredecode"> * @param {Mixed} [accumulator] Initial value of the accumulator.</td></tr><tr><td class="codekolom">2976</td><td class="codekolom">3022</td><td class="bredecode"> * @param {Mixed} [thisArg] The `this` binding of `callback`.</td></tr><tr><td class="codekolom">2977</td><td class="codekolom">3023</td><td class="bredecode"> * @returns {Mixed} Returns the accumulated value.</td></tr><tr><td class="codekolom">2978</td><td class="codekolom">3024</td><td class="bredecode"> * @example</td></tr><tr><td class="codekolom">2979</td><td class="codekolom">3025</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">2980</td><td class="codekolom">3026</td><td class="bredecode"> * var list = [[0, 1], [2, 3], [4, 5]];</td></tr><tr><td class="codekolom">2981</td><td class="codekolom">3027</td><td class="bredecode"> * var flat = _.reduceRight(list, function(a, b) { return a.concat(b); }, []);</td></tr><tr><td class="codekolom">2982</td><td class="codekolom">3028</td><td class="bredecode"> * // =&gt; [4, 5, 2, 3, 0, 1]</td></tr><tr><td class="codekolom">2983</td><td class="codekolom">3029</td><td class="bredecode"> */</td></tr><tr class="del"><td class="codekolom">2984</td><td class="codekolom"></td><td class="bredecode">- function reduceRight(collection, callback, accumulator, thisArg) {</td></tr><tr class="add"><td class="codekolom"></td><td class="codekolom">3030</td><td class="bredecode">+ var reduceRight = function reduceRight(callback, accumulator, collection, thisArg) {</td></tr><tr><td class="codekolom">2985</td><td class="codekolom">3031</td><td class="bredecode"> var iterable = collection,</td></tr><tr><td class="codekolom">2986</td><td class="codekolom">3032</td><td class="bredecode"> length = collection ? collection.length : 0,</td></tr><tr><td class="codekolom">2987</td><td class="codekolom">3033</td><td class="bredecode"> noaccum = arguments.length &lt; 3;</td></tr><tr><td class="codekolom">2988</td><td class="codekolom">3034</td><td class="bredecode"> </td></tr><tr><td class="codekolom">2989</td><td class="codekolom">3035</td><td class="bredecode"> if (typeof length != 'number') {</td></tr><tr><td class="codekolom">2990</td><td class="codekolom">3036</td><td class="bredecode"> var props = keys(collection);</td></tr><tr><td class="codekolom">2991</td><td class="codekolom">3037</td><td class="bredecode"> length = props.length;</td></tr><tr><td class="codekolom">2992</td><td class="codekolom">3038</td><td class="bredecode"> }</td></tr><tr><td class="codekolom">2993</td><td class="codekolom">3039</td><td class="bredecode"> callback = lodash.createCallback(callback, thisArg, 4);</td></tr><tr class="del"><td class="codekolom">2994</td><td class="codekolom"></td><td class="bredecode">- forEach(collection, function(value, index, collection) {</td></tr><tr class="add"><td class="codekolom"></td><td class="codekolom">3040</td><td class="bredecode">+ forEach(function(value, index, collection) {</td></tr><tr><td class="codekolom">2995</td><td class="codekolom">3041</td><td class="bredecode"> index = props ? props[--length] : --length;</td></tr><tr><td class="codekolom">2996</td><td class="codekolom">3042</td><td class="bredecode"> accumulator = noaccum</td></tr><tr><td class="codekolom">2997</td><td class="codekolom">3043</td><td class="bredecode"> ? (noaccum = false, iterable[index])</td></tr><tr><td class="codekolom">2998</td><td class="codekolom">3044</td><td class="bredecode"> : callback(accumulator, iterable[index], index, collection);</td></tr><tr class="del"><td class="codekolom">2999</td><td class="codekolom"></td><td class="bredecode">- });</td></tr><tr class="add"><td class="codekolom"></td><td class="codekolom">3045</td><td class="bredecode">+ }, collection);</td></tr><tr><td class="codekolom">3000</td><td class="codekolom">3046</td><td class="bredecode"> return accumulator;</td></tr><tr class="del"><td class="codekolom">3001</td><td class="codekolom"></td><td class="bredecode">- }</td></tr><tr class="add"><td class="codekolom"></td><td class="codekolom">3047</td><td class="bredecode">+ }.autoCurry(3);</td></tr><tr><td class="codekolom">3002</td><td class="codekolom">3048</td><td class="bredecode"> </td></tr><tr><td class="codekolom">3003</td><td class="codekolom">3049</td><td class="bredecode"> /**</td></tr><tr><td class="codekolom">3004</td><td class="codekolom">3050</td><td class="bredecode"> * The opposite of `_.filter`, this method returns the elements of a</td></tr><tr><td class="codekolom">3005</td><td class="codekolom">3051</td><td class="bredecode"> * `collection` that `callback` does **not** return truthy for.</td></tr><tr><td class="codekolom">3006</td><td class="codekolom">3052</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">3007</td><td class="codekolom">3053</td><td class="bredecode"> * If a property name is passed for `callback`, the created "_.pluck" style</td></tr><tr><td class="codekolom">3008</td><td class="codekolom">3054</td><td class="bredecode"> * callback will return the property value of the given element.</td></tr><tr><td class="codekolom">3009</td><td class="codekolom">3055</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">3010</td><td class="codekolom">3056</td><td class="bredecode"> * If an object is passed for `callback`, the created "_.where" style callback</td></tr><tr><td class="codekolom">3011</td><td class="codekolom">3057</td><td class="bredecode"> * will return `true` for elements that have the properties of the given object,</td></tr><tr><td class="codekolom">3012</td><td class="codekolom">3058</td><td class="bredecode"> * else `false`.</td></tr><tr><td class="codekolom">3013</td><td class="codekolom">3059</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">3014</td><td class="codekolom">3060</td><td class="bredecode"> * @static</td></tr><tr><td class="codekolom">3015</td><td class="codekolom">3061</td><td class="bredecode"> * @memberOf _</td></tr><tr><td class="codekolom">3016</td><td class="codekolom">3062</td><td class="bredecode"> * @category Collections</td></tr><tr><td class="codekolom">3017</td><td class="codekolom">3063</td><td class="bredecode"> * @param {Array|Object|String} collection The collection to iterate over.</td></tr><tr><td class="codekolom">3018</td><td class="codekolom">3064</td><td class="bredecode"> * @param {Function|Object|String} [callback=identity] The function called per</td></tr><tr><td class="codekolom">3019</td><td class="codekolom">3065</td><td class="bredecode"> * iteration. If a property name or object is passed, it will be used to create</td></tr><tr><td class="codekolom">3020</td><td class="codekolom">3066</td><td class="bredecode"> * a "_.pluck" or "_.where" style callback, respectively.</td></tr><tr><td class="codekolom">3021</td><td class="codekolom">3067</td><td class="bredecode"> * @param {Mixed} [thisArg] The `this` binding of `callback`.</td></tr><tr><td class="codekolom">3022</td><td class="codekolom">3068</td><td class="bredecode"> * @returns {Array} Returns a new array of elements that did **not** pass the</td></tr><tr><td class="codekolom">3023</td><td class="codekolom">3069</td><td class="bredecode"> * callback check.</td></tr><tr><td class="codekolom">3024</td><td class="codekolom">3070</td><td class="bredecode"> * @example</td></tr><tr><td class="codekolom">3025</td><td class="codekolom">3071</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">3026</td><td class="codekolom">3072</td><td class="bredecode"> * var odds = _.reject([1, 2, 3, 4, 5, 6], function(num) { return num % 2 == 0; });</td></tr><tr><td class="codekolom">3027</td><td class="codekolom">3073</td><td class="bredecode"> * // =&gt; [1, 3, 5]</td></tr><tr><td class="codekolom">3028</td><td class="codekolom">3074</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">3029</td><td class="codekolom">3075</td><td class="bredecode"> * var food = [</td></tr><tr><td class="codekolom">3030</td><td class="codekolom">3076</td><td class="bredecode"> * { 'name': 'apple', 'organic': false, 'type': 'fruit' },</td></tr><tr><td class="codekolom">3031</td><td class="codekolom">3077</td><td class="bredecode"> * { 'name': 'carrot', 'organic': true, 'type': 'vegetable' }</td></tr><tr><td class="codekolom">3032</td><td class="codekolom">3078</td><td class="bredecode"> * ];</td></tr><tr><td class="codekolom">3033</td><td class="codekolom">3079</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">3034</td><td class="codekolom">3080</td><td class="bredecode"> * // using "_.pluck" callback shorthand</td></tr><tr><td class="codekolom">3035</td><td class="codekolom">3081</td><td class="bredecode"> * _.reject(food, 'organic');</td></tr><tr><td class="codekolom">3036</td><td class="codekolom">3082</td><td class="bredecode"> * // =&gt; [{ 'name': 'apple', 'organic': false, 'type': 'fruit' }]</td></tr><tr><td class="codekolom">3037</td><td class="codekolom">3083</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">3038</td><td class="codekolom">3084</td><td class="bredecode"> * // using "_.where" callback shorthand</td></tr><tr><td class="codekolom">3039</td><td class="codekolom">3085</td><td class="bredecode"> * _.reject(food, { 'type': 'fruit' });</td></tr><tr><td class="codekolom">3040</td><td class="codekolom">3086</td><td class="bredecode"> * // =&gt; [{ 'name': 'carrot', 'organic': true, 'type': 'vegetable' }]</td></tr><tr><td class="codekolom">3041</td><td class="codekolom">3087</td><td class="bredecode"> */</td></tr><tr class="del"><td class="codekolom">3042</td><td class="codekolom"></td><td class="bredecode">- function reject(collection, callback, thisArg) {</td></tr><tr class="add"><td class="codekolom"></td><td class="codekolom">3088</td><td class="bredecode">+ var reject = function reject(callback, collection, thisArg) {</td></tr><tr><td class="codekolom">3043</td><td class="codekolom">3089</td><td class="bredecode"> callback = lodash.createCallback(callback, thisArg);</td></tr><tr class="del"><td class="codekolom">3044</td><td class="codekolom"></td><td class="bredecode">- return filter(collection, function(value, index, collection) {</td></tr><tr class="add"><td class="codekolom"></td><td class="codekolom">3090</td><td class="bredecode">+ return filter(function(value, index, collection) {</td></tr><tr><td class="codekolom">3045</td><td class="codekolom">3091</td><td class="bredecode"> return !callback(value, index, collection);</td></tr><tr class="del"><td class="codekolom">3046</td><td class="codekolom"></td><td class="bredecode">- });</td></tr><tr class="del"><td class="codekolom">3047</td><td class="codekolom"></td><td class="bredecode">- }</td></tr><tr class="add"><td class="codekolom"></td><td class="codekolom">3092</td><td class="bredecode">+ }, collection);</td></tr><tr class="add"><td class="codekolom"></td><td class="codekolom">3093</td><td class="bredecode">+ }.autoCurry(2);</td></tr><tr><td class="codekolom">3048</td><td class="codekolom">3094</td><td class="bredecode"> </td></tr><tr><td class="codekolom">3049</td><td class="codekolom">3095</td><td class="bredecode"> /**</td></tr><tr><td class="codekolom">3050</td><td class="codekolom">3096</td><td class="bredecode"> * Creates an array of shuffled `array` values, using a version of the</td></tr><tr><td class="codekolom">3051</td><td class="codekolom">3097</td><td class="bredecode"> * Fisher-Yates shuffle. See http://en.wikipedia.org/wiki/Fisher-Yates_shuffle.</td></tr><tr><td class="codekolom">3052</td><td class="codekolom">3098</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">3053</td><td class="codekolom">3099</td><td class="bredecode"> * @static</td></tr><tr><td class="codekolom">3054</td><td class="codekolom">3100</td><td class="bredecode"> * @memberOf _</td></tr><tr><td class="codekolom">3055</td><td class="codekolom">3101</td><td class="bredecode"> * @category Collections</td></tr><tr><td class="codekolom">3056</td><td class="codekolom">3102</td><td class="bredecode"> * @param {Array|Object|String} collection The collection to shuffle.</td></tr><tr><td class="codekolom">3057</td><td class="codekolom">3103</td><td class="bredecode"> * @returns {Array} Returns a new shuffled collection.</td></tr><tr><td class="codekolom">3058</td><td class="codekolom">3104</td><td class="bredecode"> * @example</td></tr><tr><td class="codekolom">3059</td><td class="codekolom">3105</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">3060</td><td class="codekolom">3106</td><td class="bredecode"> * _.shuffle([1, 2, 3, 4, 5, 6]);</td></tr><tr><td class="codekolom">3061</td><td class="codekolom">3107</td><td class="bredecode"> * // =&gt; [4, 1, 6, 3, 5, 2]</td></tr><tr><td class="codekolom">3062</td><td class="codekolom">3108</td><td class="bredecode"> */</td></tr><tr><td class="codekolom">3063</td><td class="codekolom">3109</td><td class="bredecode"> function shuffle(collection) {</td></tr><tr><td class="codekolom">3064</td><td class="codekolom">3110</td><td class="bredecode"> var index = -1,</td></tr><tr><td class="codekolom">3065</td><td class="codekolom">3111</td><td class="bredecode"> length = collection ? collection.length : 0,</td></tr><tr><td class="codekolom">3066</td><td class="codekolom">3112</td><td class="bredecode"> result = Array(typeof length == 'number' ? length : 0);</td></tr><tr><td class="codekolom">3067</td><td class="codekolom">3113</td><td class="bredecode"> </td></tr><tr class="del"><td class="codekolom">3068</td><td class="codekolom"></td><td class="bredecode">- forEach(collection, function(value) {</td></tr><tr class="add"><td class="codekolom"></td><td class="codekolom">3114</td><td class="bredecode">+ forEach(function(value) {</td></tr><tr><td class="codekolom">3069</td><td class="codekolom">3115</td><td class="bredecode"> var rand = floor(nativeRandom() * (++index + 1));</td></tr><tr><td class="codekolom">3070</td><td class="codekolom">3116</td><td class="bredecode"> result[index] = result[rand];</td></tr><tr><td class="codekolom">3071</td><td class="codekolom">3117</td><td class="bredecode"> result[rand] = value;</td></tr><tr class="del"><td class="codekolom">3072</td><td class="codekolom"></td><td class="bredecode">- });</td></tr><tr class="add"><td class="codekolom"></td><td class="codekolom">3118</td><td class="bredecode">+ }, collection);</td></tr><tr><td class="codekolom">3073</td><td class="codekolom">3119</td><td class="bredecode"> return result;</td></tr><tr><td class="codekolom">3074</td><td class="codekolom">3120</td><td class="bredecode"> }</td></tr><tr><td class="codekolom">3075</td><td class="codekolom">3121</td><td class="bredecode"> </td></tr><tr><td class="codekolom">3076</td><td class="codekolom">3122</td><td class="bredecode"> /**</td></tr><tr><td class="codekolom">3077</td><td class="codekolom">3123</td><td class="bredecode"> * Gets the size of the `collection` by returning `collection.length` for arrays</td></tr><tr><td class="codekolom">3078</td><td class="codekolom">3124</td><td class="bredecode"> * and array-like objects or the number of own enumerable properties for objects.</td></tr><tr><td class="codekolom">3079</td><td class="codekolom">3125</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">3080</td><td class="codekolom">3126</td><td class="bredecode"> * @static</td></tr><tr><td class="codekolom">3081</td><td class="codekolom">3127</td><td class="bredecode"> * @memberOf _</td></tr><tr><td class="codekolom">3082</td><td class="codekolom">3128</td><td class="bredecode"> * @category Collections</td></tr><tr><td class="codekolom">3083</td><td class="codekolom">3129</td><td class="bredecode"> * @param {Array|Object|String} collection The collection to inspect.</td></tr><tr><td class="codekolom">3084</td><td class="codekolom">3130</td><td class="bredecode"> * @returns {Number} Returns `collection.length` or number of own enumerable properties.</td></tr><tr><td class="codekolom">3085</td><td class="codekolom">3131</td><td class="bredecode"> * @example</td></tr><tr><td class="codekolom">3086</td><td class="codekolom">3132</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">3087</td><td class="codekolom">3133</td><td class="bredecode"> * _.size([1, 2]);</td></tr><tr><td class="codekolom">3088</td><td class="codekolom">3134</td><td class="bredecode"> * // =&gt; 2</td></tr><tr><td class="codekolom">3089</td><td class="codekolom">3135</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">3090</td><td class="codekolom">3136</td><td class="bredecode"> * _.size({ 'one': 1, 'two': 2, 'three': 3 });</td></tr><tr><td class="codekolom">3091</td><td class="codekolom">3137</td><td class="bredecode"> * // =&gt; 3</td></tr><tr><td class="codekolom">3092</td><td class="codekolom">3138</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">3093</td><td class="codekolom">3139</td><td class="bredecode"> * _.size('curly');</td></tr><tr><td class="codekolom">3094</td><td class="codekolom">3140</td><td class="bredecode"> * // =&gt; 5</td></tr><tr><td class="codekolom">3095</td><td class="codekolom">3141</td><td class="bredecode"> */</td></tr><tr><td class="codekolom">3096</td><td class="codekolom">3142</td><td class="bredecode"> function size(collection) {</td></tr><tr><td class="codekolom">3097</td><td class="codekolom">3143</td><td class="bredecode"> var length = collection ? collection.length : 0;</td></tr><tr><td class="codekolom">3098</td><td class="codekolom">3144</td><td class="bredecode"> return typeof length == 'number' ? length : keys(collection).length;</td></tr><tr><td class="codekolom">3099</td><td class="codekolom">3145</td><td class="bredecode"> }</td></tr><tr><td class="codekolom">3100</td><td class="codekolom">3146</td><td class="bredecode"> </td></tr><tr><td class="codekolom">3101</td><td class="codekolom">3147</td><td class="bredecode"> /**</td></tr><tr><td class="codekolom">3102</td><td class="codekolom">3148</td><td class="bredecode"> * Checks if the `callback` returns a truthy value for **any** element of a</td></tr><tr><td class="codekolom">3103</td><td class="codekolom">3149</td><td class="bredecode"> * `collection`. The function returns as soon as it finds passing value, and</td></tr><tr><td class="codekolom">3104</td><td class="codekolom">3150</td><td class="bredecode"> * does not iterate over the entire `collection`. The `callback` is bound to</td></tr><tr><td class="codekolom">3105</td><td class="codekolom">3151</td><td class="bredecode"> * `thisArg` and invoked with three arguments; (value, index|key, collection).</td></tr><tr><td class="codekolom">3106</td><td class="codekolom">3152</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">3107</td><td class="codekolom">3153</td><td class="bredecode"> * If a property name is passed for `callback`, the created "_.pluck" style</td></tr><tr><td class="codekolom">3108</td><td class="codekolom">3154</td><td class="bredecode"> * callback will return the property value of the given element.</td></tr><tr><td class="codekolom">3109</td><td class="codekolom">3155</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">3110</td><td class="codekolom">3156</td><td class="bredecode"> * If an object is passed for `callback`, the created "_.where" style callback</td></tr><tr><td class="codekolom">3111</td><td class="codekolom">3157</td><td class="bredecode"> * will return `true` for elements that have the properties of the given object,</td></tr><tr><td class="codekolom">3112</td><td class="codekolom">3158</td><td class="bredecode"> * else `false`.</td></tr><tr><td class="codekolom">3113</td><td class="codekolom">3159</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">3114</td><td class="codekolom">3160</td><td class="bredecode"> * @static</td></tr><tr><td class="codekolom">3115</td><td class="codekolom">3161</td><td class="bredecode"> * @memberOf _</td></tr><tr><td class="codekolom">3116</td><td class="codekolom">3162</td><td class="bredecode"> * @alias any</td></tr><tr><td class="codekolom">3117</td><td class="codekolom">3163</td><td class="bredecode"> * @category Collections</td></tr><tr><td class="codekolom">3118</td><td class="codekolom">3164</td><td class="bredecode"> * @param {Array|Object|String} collection The collection to iterate over.</td></tr><tr><td class="codekolom">3119</td><td class="codekolom">3165</td><td class="bredecode"> * @param {Function|Object|String} [callback=identity] The function called per</td></tr><tr><td class="codekolom">3120</td><td class="codekolom">3166</td><td class="bredecode"> * iteration. If a property name or object is passed, it will be used to create</td></tr><tr><td class="codekolom">3121</td><td class="codekolom">3167</td><td class="bredecode"> * a "_.pluck" or "_.where" style callback, respectively.</td></tr><tr><td class="codekolom">3122</td><td class="codekolom">3168</td><td class="bredecode"> * @param {Mixed} [thisArg] The `this` binding of `callback`.</td></tr><tr><td class="codekolom">3123</td><td class="codekolom">3169</td><td class="bredecode"> * @returns {Boolean} Returns `true` if any element passes the callback check,</td></tr><tr><td class="codekolom">3124</td><td class="codekolom">3170</td><td class="bredecode"> * else `false`.</td></tr><tr><td class="codekolom">3125</td><td class="codekolom">3171</td><td class="bredecode"> * @example</td></tr><tr><td class="codekolom">3126</td><td class="codekolom">3172</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">3127</td><td class="codekolom">3173</td><td class="bredecode"> * _.some([null, 0, 'yes', false], Boolean);</td></tr><tr><td class="codekolom">3128</td><td class="codekolom">3174</td><td class="bredecode"> * // =&gt; true</td></tr><tr><td class="codekolom">3129</td><td class="codekolom">3175</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">3130</td><td class="codekolom">3176</td><td class="bredecode"> * var food = [</td></tr><tr><td class="codekolom">3131</td><td class="codekolom">3177</td><td class="bredecode"> * { 'name': 'apple', 'organic': false, 'type': 'fruit' },</td></tr><tr><td class="codekolom">3132</td><td class="codekolom">3178</td><td class="bredecode"> * { 'name': 'carrot', 'organic': true, 'type': 'vegetable' }</td></tr><tr><td class="codekolom">3133</td><td class="codekolom">3179</td><td class="bredecode"> * ];</td></tr><tr><td class="codekolom">3134</td><td class="codekolom">3180</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">3135</td><td class="codekolom">3181</td><td class="bredecode"> * // using "_.pluck" callback shorthand</td></tr><tr><td class="codekolom">3136</td><td class="codekolom">3182</td><td class="bredecode"> * _.some(food, 'organic');</td></tr><tr><td class="codekolom">3137</td><td class="codekolom">3183</td><td class="bredecode"> * // =&gt; true</td></tr><tr><td class="codekolom">3138</td><td class="codekolom">3184</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">3139</td><td class="codekolom">3185</td><td class="bredecode"> * // using "_.where" callback shorthand</td></tr><tr><td class="codekolom">3140</td><td class="codekolom">3186</td><td class="bredecode"> * _.some(food, { 'type': 'meat' });</td></tr><tr><td class="codekolom">3141</td><td class="codekolom">3187</td><td class="bredecode"> * // =&gt; false</td></tr><tr><td class="codekolom">3142</td><td class="codekolom">3188</td><td class="bredecode"> */</td></tr><tr class="del"><td class="codekolom">3143</td><td class="codekolom"></td><td class="bredecode">- function some(collection, callback, thisArg) {</td></tr><tr class="add"><td class="codekolom"></td><td class="codekolom">3189</td><td class="bredecode">+ var some = function some(callback, collection, thisArg) {</td></tr><tr><td class="codekolom">3144</td><td class="codekolom">3190</td><td class="bredecode"> var result;</td></tr><tr><td class="codekolom">3145</td><td class="codekolom">3191</td><td class="bredecode"> callback = lodash.createCallback(callback, thisArg);</td></tr><tr><td class="codekolom">3146</td><td class="codekolom">3192</td><td class="bredecode"> </td></tr><tr><td class="codekolom">3147</td><td class="codekolom">3193</td><td class="bredecode"> var index = -1,</td></tr><tr><td class="codekolom">3148</td><td class="codekolom">3194</td><td class="bredecode"> length = collection ? collection.length : 0;</td></tr><tr><td class="codekolom">3149</td><td class="codekolom">3195</td><td class="bredecode"> </td></tr><tr><td class="codekolom">3150</td><td class="codekolom">3196</td><td class="bredecode"> if (typeof length == 'number') {</td></tr><tr><td class="codekolom">3151</td><td class="codekolom">3197</td><td class="bredecode"> while (++index &lt; length) {</td></tr><tr><td class="codekolom">3152</td><td class="codekolom">3198</td><td class="bredecode"> if ((result = callback(collection[index], index, collection))) {</td></tr><tr><td class="codekolom">3153</td><td class="codekolom">3199</td><td class="bredecode"> break;</td></tr><tr><td class="codekolom">3154</td><td class="codekolom">3200</td><td class="bredecode"> }</td></tr><tr><td class="codekolom">3155</td><td class="codekolom">3201</td><td class="bredecode"> }</td></tr><tr><td class="codekolom">3156</td><td class="codekolom">3202</td><td class="bredecode"> } else {</td></tr><tr><td class="codekolom">3157</td><td class="codekolom">3203</td><td class="bredecode"> forOwn(collection, function(value, index, collection) {</td></tr><tr><td class="codekolom">3158</td><td class="codekolom">3204</td><td class="bredecode"> return !(result = callback(value, index, collection));</td></tr><tr><td class="codekolom">3159</td><td class="codekolom">3205</td><td class="bredecode"> });</td></tr><tr><td class="codekolom">3160</td><td class="codekolom">3206</td><td class="bredecode"> }</td></tr><tr><td class="codekolom">3161</td><td class="codekolom">3207</td><td class="bredecode"> return !!result;</td></tr><tr class="del"><td class="codekolom">3162</td><td class="codekolom"></td><td class="bredecode">- }</td></tr><tr class="add"><td class="codekolom"></td><td class="codekolom">3208</td><td class="bredecode">+ }.autoCurry(2);</td></tr><tr><td class="codekolom">3163</td><td class="codekolom">3209</td><td class="bredecode"> </td></tr><tr><td class="codekolom">3164</td><td class="codekolom">3210</td><td class="bredecode"> /**</td></tr><tr><td class="codekolom">3165</td><td class="codekolom">3211</td><td class="bredecode"> * Creates an array of elements, sorted in ascending order by the results of</td></tr><tr><td class="codekolom">3166</td><td class="codekolom">3212</td><td class="bredecode"> * running each element in the `collection` through the `callback`. This method</td></tr><tr><td class="codekolom">3167</td><td class="codekolom">3213</td><td class="bredecode"> * performs a stable sort, that is, it will preserve the original sort order of</td></tr><tr><td class="codekolom">3168</td><td class="codekolom">3214</td><td class="bredecode"> * equal elements. The `callback` is bound to `thisArg` and invoked with three</td></tr><tr><td class="codekolom">3169</td><td class="codekolom">3215</td><td class="bredecode"> * arguments; (value, index|key, collection).</td></tr><tr><td class="codekolom">3170</td><td class="codekolom">3216</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">3171</td><td class="codekolom">3217</td><td class="bredecode"> * If a property name is passed for `callback`, the created "_.pluck" style</td></tr><tr><td class="codekolom">3172</td><td class="codekolom">3218</td><td class="bredecode"> * callback will return the property value of the given element.</td></tr><tr><td class="codekolom">3173</td><td class="codekolom">3219</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">3174</td><td class="codekolom">3220</td><td class="bredecode"> * If an object is passed for `callback`, the created "_.where" style callback</td></tr><tr><td class="codekolom">3175</td><td class="codekolom">3221</td><td class="bredecode"> * will return `true` for elements that have the properties of the given object,</td></tr><tr><td class="codekolom">3176</td><td class="codekolom">3222</td><td class="bredecode"> * else `false`.</td></tr><tr><td class="codekolom">3177</td><td class="codekolom">3223</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">3178</td><td class="codekolom">3224</td><td class="bredecode"> * @static</td></tr><tr><td class="codekolom">3179</td><td class="codekolom">3225</td><td class="bredecode"> * @memberOf _</td></tr><tr><td class="codekolom">3180</td><td class="codekolom">3226</td><td class="bredecode"> * @category Collections</td></tr><tr><td class="codekolom">3181</td><td class="codekolom">3227</td><td class="bredecode"> * @param {Array|Object|String} collection The collection to iterate over.</td></tr><tr><td class="codekolom">3182</td><td class="codekolom">3228</td><td class="bredecode"> * @param {Function|Object|String} [callback=identity] The function called per</td></tr><tr><td class="codekolom">3183</td><td class="codekolom">3229</td><td class="bredecode"> * iteration. If a property name or object is passed, it will be used to create</td></tr><tr><td class="codekolom">3184</td><td class="codekolom">3230</td><td class="bredecode"> * a "_.pluck" or "_.where" style callback, respectively.</td></tr><tr><td class="codekolom">3185</td><td class="codekolom">3231</td><td class="bredecode"> * @param {Mixed} [thisArg] The `this` binding of `callback`.</td></tr><tr><td class="codekolom">3186</td><td class="codekolom">3232</td><td class="bredecode"> * @returns {Array} Returns a new array of sorted elements.</td></tr><tr><td class="codekolom">3187</td><td class="codekolom">3233</td><td class="bredecode"> * @example</td></tr><tr><td class="codekolom">3188</td><td class="codekolom">3234</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">3189</td><td class="codekolom">3235</td><td class="bredecode"> * _.sortBy([1, 2, 3], function(num) { return Math.sin(num); });</td></tr><tr><td class="codekolom">3190</td><td class="codekolom">3236</td><td class="bredecode"> * // =&gt; [3, 1, 2]</td></tr><tr><td class="codekolom">3191</td><td class="codekolom">3237</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">3192</td><td class="codekolom">3238</td><td class="bredecode"> * _.sortBy([1, 2, 3], function(num) { return this.sin(num); }, Math);</td></tr><tr><td class="codekolom">3193</td><td class="codekolom">3239</td><td class="bredecode"> * // =&gt; [3, 1, 2]</td></tr><tr><td class="codekolom">3194</td><td class="codekolom">3240</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">3195</td><td class="codekolom">3241</td><td class="bredecode"> * // using "_.pluck" callback shorthand</td></tr><tr><td class="codekolom">3196</td><td class="codekolom">3242</td><td class="bredecode"> * _.sortBy(['banana', 'strawberry', 'apple'], 'length');</td></tr><tr><td class="codekolom">3197</td><td class="codekolom">3243</td><td class="bredecode"> * // =&gt; ['apple', 'banana', 'strawberry']</td></tr><tr><td class="codekolom">3198</td><td class="codekolom">3244</td><td class="bredecode"> */</td></tr><tr class="del"><td class="codekolom">3199</td><td class="codekolom"></td><td class="bredecode">- function sortBy(collection, callback, thisArg) {</td></tr><tr class="add"><td class="codekolom"></td><td class="codekolom">3245</td><td class="bredecode">+ var sortBy = function sortBy(callback, collection, thisArg) {</td></tr><tr><td class="codekolom">3200</td><td class="codekolom">3246</td><td class="bredecode"> var index = -1,</td></tr><tr><td class="codekolom">3201</td><td class="codekolom">3247</td><td class="bredecode"> length = collection ? collection.length : 0,</td></tr><tr><td class="codekolom">3202</td><td class="codekolom">3248</td><td class="bredecode"> result = Array(typeof length == 'number' ? length : 0);</td></tr><tr><td class="codekolom">3203</td><td class="codekolom">3249</td><td class="bredecode"> </td></tr><tr><td class="codekolom">3204</td><td class="codekolom">3250</td><td class="bredecode"> callback = lodash.createCallback(callback, thisArg);</td></tr><tr class="del"><td class="codekolom">3205</td><td class="codekolom"></td><td class="bredecode">- forEach(collection, function(value, key, collection) {</td></tr><tr class="add"><td class="codekolom"></td><td class="codekolom">3251</td><td class="bredecode">+ forEach(function(value, key, collection) {</td></tr><tr><td class="codekolom">3206</td><td class="codekolom">3252</td><td class="bredecode"> var object = result[++index] = getObject();</td></tr><tr><td class="codekolom">3207</td><td class="codekolom">3253</td><td class="bredecode"> object.criteria = callback(value, key, collection);</td></tr><tr><td class="codekolom">3208</td><td class="codekolom">3254</td><td class="bredecode"> object.index = index;</td></tr><tr><td class="codekolom">3209</td><td class="codekolom">3255</td><td class="bredecode"> object.value = value;</td></tr><tr class="del"><td class="codekolom">3210</td><td class="codekolom"></td><td class="bredecode">- });</td></tr><tr class="add"><td class="codekolom"></td><td class="codekolom">3256</td><td class="bredecode">+ }, collection);</td></tr><tr><td class="codekolom">3211</td><td class="codekolom">3257</td><td class="bredecode"> </td></tr><tr><td class="codekolom">3212</td><td class="codekolom">3258</td><td class="bredecode"> length = result.length;</td></tr><tr><td class="codekolom">3213</td><td class="codekolom">3259</td><td class="bredecode"> result.sort(compareAscending);</td></tr><tr><td class="codekolom">3214</td><td class="codekolom">3260</td><td class="bredecode"> while (length--) {</td></tr><tr><td class="codekolom">3215</td><td class="codekolom">3261</td><td class="bredecode"> var object = result[length];</td></tr><tr><td class="codekolom">3216</td><td class="codekolom">3262</td><td class="bredecode"> result[length] = object.value;</td></tr><tr><td class="codekolom">3217</td><td class="codekolom">3263</td><td class="bredecode"> releaseObject(object);</td></tr><tr><td class="codekolom">3218</td><td class="codekolom">3264</td><td class="bredecode"> }</td></tr><tr><td class="codekolom">3219</td><td class="codekolom">3265</td><td class="bredecode"> return result;</td></tr><tr class="del"><td class="codekolom">3220</td><td class="codekolom"></td><td class="bredecode">- }</td></tr><tr class="add"><td class="codekolom"></td><td class="codekolom">3266</td><td class="bredecode">+ }.autoCurry(2);</td></tr><tr><td class="codekolom">3221</td><td class="codekolom">3267</td><td class="bredecode"> </td></tr><tr><td class="codekolom">3222</td><td class="codekolom">3268</td><td class="bredecode"> /**</td></tr><tr><td class="codekolom">3223</td><td class="codekolom">3269</td><td class="bredecode"> * Converts the `collection` to an array.</td></tr><tr><td class="codekolom">3224</td><td class="codekolom">3270</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">3225</td><td class="codekolom">3271</td><td class="bredecode"> * @static</td></tr><tr><td class="codekolom">3226</td><td class="codekolom">3272</td><td class="bredecode"> * @memberOf _</td></tr><tr><td class="codekolom">3227</td><td class="codekolom">3273</td><td class="bredecode"> * @category Collections</td></tr><tr><td class="codekolom">3228</td><td class="codekolom">3274</td><td class="bredecode"> * @param {Array|Object|String} collection The collection to convert.</td></tr><tr><td class="codekolom">3229</td><td class="codekolom">3275</td><td class="bredecode"> * @returns {Array} Returns the new converted array.</td></tr><tr><td class="codekolom">3230</td><td class="codekolom">3276</td><td class="bredecode"> * @example</td></tr><tr><td class="codekolom">3231</td><td class="codekolom">3277</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">3232</td><td class="codekolom">3278</td><td class="bredecode"> * (function() { return _.toArray(arguments).slice(1); })(1, 2, 3, 4);</td></tr><tr><td class="codekolom">3233</td><td class="codekolom">3279</td><td class="bredecode"> * // =&gt; [2, 3, 4]</td></tr><tr><td class="codekolom">3234</td><td class="codekolom">3280</td><td class="bredecode"> */</td></tr><tr><td class="codekolom">3235</td><td class="codekolom">3281</td><td class="bredecode"> function toArray(collection) {</td></tr><tr><td class="codekolom">3236</td><td class="codekolom">3282</td><td class="bredecode"> if (collection &amp;&amp; typeof collection.length == 'number') {</td></tr><tr><td class="codekolom">3237</td><td class="codekolom">3283</td><td class="bredecode"> return slice(collection);</td></tr><tr><td class="codekolom">3238</td><td class="codekolom">3284</td><td class="bredecode"> }</td></tr><tr><td class="codekolom">3239</td><td class="codekolom">3285</td><td class="bredecode"> return values(collection);</td></tr><tr><td class="codekolom">3240</td><td class="codekolom">3286</td><td class="bredecode"> }</td></tr><tr><td class="codekolom">3241</td><td class="codekolom">3287</td><td class="bredecode"> </td></tr><tr><td class="codekolom">3242</td><td class="codekolom">3288</td><td class="bredecode"> /**</td></tr><tr><td class="codekolom">3243</td><td class="codekolom">3289</td><td class="bredecode"> * Examines each element in a `collection`, returning an array of all elements</td></tr><tr><td class="codekolom">3244</td><td class="codekolom">3290</td><td class="bredecode"> * that have the given `properties`. When checking `properties`, this method</td></tr><tr><td class="codekolom">3245</td><td class="codekolom">3291</td><td class="bredecode"> * performs a deep comparison between values to determine if they are equivalent</td></tr><tr><td class="codekolom">3246</td><td class="codekolom">3292</td><td class="bredecode"> * to each other.</td></tr><tr><td class="codekolom">3247</td><td class="codekolom">3293</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">3248</td><td class="codekolom">3294</td><td class="bredecode"> * @static</td></tr><tr><td class="codekolom">3249</td><td class="codekolom">3295</td><td class="bredecode"> * @memberOf _</td></tr><tr><td class="codekolom">3250</td><td class="codekolom">3296</td><td class="bredecode"> * @type Function</td></tr><tr><td class="codekolom">3251</td><td class="codekolom">3297</td><td class="bredecode"> * @category Collections</td></tr><tr><td class="codekolom">3252</td><td class="codekolom">3298</td><td class="bredecode"> * @param {Array|Object|String} collection The collection to iterate over.</td></tr><tr><td class="codekolom">3253</td><td class="codekolom">3299</td><td class="bredecode"> * @param {Object} properties The object of property values to filter by.</td></tr><tr><td class="codekolom">3254</td><td class="codekolom">3300</td><td class="bredecode"> * @returns {Array} Returns a new array of elements that have the given `properties`.</td></tr><tr><td class="codekolom">3255</td><td class="codekolom">3301</td><td class="bredecode"> * @example</td></tr><tr><td class="codekolom">3256</td><td class="codekolom">3302</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">3257</td><td class="codekolom">3303</td><td class="bredecode"> * var stooges = [</td></tr><tr><td class="codekolom">3258</td><td class="codekolom">3304</td><td class="bredecode"> * { 'name': 'moe', 'age': 40 },</td></tr><tr><td class="codekolom">3259</td><td class="codekolom">3305</td><td class="bredecode"> * { 'name': 'larry', 'age': 50 }</td></tr><tr><td class="codekolom">3260</td><td class="codekolom">3306</td><td class="bredecode"> * ];</td></tr><tr><td class="codekolom">3261</td><td class="codekolom">3307</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">3262</td><td class="codekolom">3308</td><td class="bredecode"> * _.where(stooges, { 'age': 40 });</td></tr><tr><td class="codekolom">3263</td><td class="codekolom">3309</td><td class="bredecode"> * // =&gt; [{ 'name': 'moe', 'age': 40 }]</td></tr><tr><td class="codekolom">3264</td><td class="codekolom">3310</td><td class="bredecode"> */</td></tr><tr><td class="codekolom">3265</td><td class="codekolom">3311</td><td class="bredecode"> var where = filter;</td></tr><tr><td class="codekolom">3266</td><td class="codekolom">3312</td><td class="bredecode"> </td></tr><tr><td class="codekolom">3267</td><td class="codekolom">3313</td><td class="bredecode"> /*--------------------------------------------------------------------------*/</td></tr><tr><td class="codekolom">3268</td><td class="codekolom">3314</td><td class="bredecode"> </td></tr><tr><td class="codekolom">3269</td><td class="codekolom">3315</td><td class="bredecode"> /**</td></tr><tr><td class="codekolom">3270</td><td class="codekolom">3316</td><td class="bredecode"> * Creates an array with all falsey values of `array` removed. The values</td></tr><tr><td class="codekolom">3271</td><td class="codekolom">3317</td><td class="bredecode"> * `false`, `null`, `0`, `""`, `undefined` and `NaN` are all falsey.</td></tr><tr><td class="codekolom">3272</td><td class="codekolom">3318</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">3273</td><td class="codekolom">3319</td><td class="bredecode"> * @static</td></tr><tr><td class="codekolom">3274</td><td class="codekolom">3320</td><td class="bredecode"> * @memberOf _</td></tr><tr><td class="codekolom">3275</td><td class="codekolom">3321</td><td class="bredecode"> * @category Arrays</td></tr><tr><td class="codekolom">3276</td><td class="codekolom">3322</td><td class="bredecode"> * @param {Array} array The array to compact.</td></tr><tr><td class="codekolom">3277</td><td class="codekolom">3323</td><td class="bredecode"> * @returns {Array} Returns a new filtered array.</td></tr><tr><td class="codekolom">3278</td><td class="codekolom">3324</td><td class="bredecode"> * @example</td></tr><tr><td class="codekolom">3279</td><td class="codekolom">3325</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">3280</td><td class="codekolom">3326</td><td class="bredecode"> * _.compact([0, 1, false, 2, '', 3]);</td></tr><tr><td class="codekolom">3281</td><td class="codekolom">3327</td><td class="bredecode"> * // =&gt; [1, 2, 3]</td></tr><tr><td class="codekolom">3282</td><td class="codekolom">3328</td><td class="bredecode"> */</td></tr><tr><td class="codekolom">3283</td><td class="codekolom">3329</td><td class="bredecode"> function compact(array) {</td></tr><tr><td class="codekolom">3284</td><td class="codekolom">3330</td><td class="bredecode"> var index = -1,</td></tr><tr><td class="codekolom">3285</td><td class="codekolom">3331</td><td class="bredecode"> length = array ? array.length : 0,</td></tr><tr><td class="codekolom">3286</td><td class="codekolom">3332</td><td class="bredecode"> result = [];</td></tr><tr><td class="codekolom">3287</td><td class="codekolom">3333</td><td class="bredecode"> </td></tr><tr><td class="codekolom">3288</td><td class="codekolom">3334</td><td class="bredecode"> while (++index &lt; length) {</td></tr><tr><td class="codekolom">3289</td><td class="codekolom">3335</td><td class="bredecode"> var value = array[index];</td></tr><tr><td class="codekolom">3290</td><td class="codekolom">3336</td><td class="bredecode"> if (value) {</td></tr><tr><td class="codekolom">3291</td><td class="codekolom">3337</td><td class="bredecode"> result.push(value);</td></tr><tr><td class="codekolom">3292</td><td class="codekolom">3338</td><td class="bredecode"> }</td></tr><tr><td class="codekolom">3293</td><td class="codekolom">3339</td><td class="bredecode"> }</td></tr><tr><td class="codekolom">3294</td><td class="codekolom">3340</td><td class="bredecode"> return result;</td></tr><tr><td class="codekolom">3295</td><td class="codekolom">3341</td><td class="bredecode"> }</td></tr><tr><td class="codekolom">3296</td><td class="codekolom">3342</td><td class="bredecode"> </td></tr><tr><td class="codekolom">3297</td><td class="codekolom">3343</td><td class="bredecode"> /**</td></tr><tr><td class="codekolom">3298</td><td class="codekolom">3344</td><td class="bredecode"> * Creates an array of `array` elements not present in the other arrays</td></tr><tr><td class="codekolom">3299</td><td class="codekolom">3345</td><td class="bredecode"> * using strict equality for comparisons, i.e. `===`.</td></tr><tr><td class="codekolom">3300</td><td class="codekolom">3346</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">3301</td><td class="codekolom">3347</td><td class="bredecode"> * @static</td></tr><tr><td class="codekolom">3302</td><td class="codekolom">3348</td><td class="bredecode"> * @memberOf _</td></tr><tr><td class="codekolom">3303</td><td class="codekolom">3349</td><td class="bredecode"> * @category Arrays</td></tr><tr><td class="codekolom">3304</td><td class="codekolom">3350</td><td class="bredecode"> * @param {Array} array The array to process.</td></tr><tr><td class="codekolom">3305</td><td class="codekolom">3351</td><td class="bredecode"> * @param {Array} [array1, array2, ...] Arrays to check.</td></tr><tr><td class="codekolom">3306</td><td class="codekolom">3352</td><td class="bredecode"> * @returns {Array} Returns a new array of `array` elements not present in the</td></tr><tr><td class="codekolom">3307</td><td class="codekolom">3353</td><td class="bredecode"> * other arrays.</td></tr><tr><td class="codekolom">3308</td><td class="codekolom">3354</td><td class="bredecode"> * @example</td></tr><tr><td class="codekolom">3309</td><td class="codekolom">3355</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">3310</td><td class="codekolom">3356</td><td class="bredecode"> * _.difference([1, 2, 3, 4, 5], [5, 2, 10]);</td></tr><tr><td class="codekolom">3311</td><td class="codekolom">3357</td><td class="bredecode"> * // =&gt; [1, 3, 4]</td></tr><tr><td class="codekolom">3312</td><td class="codekolom">3358</td><td class="bredecode"> */</td></tr><tr class="del"><td class="codekolom">3313</td><td class="codekolom"></td><td class="bredecode">- function difference(array) {</td></tr><tr class="add"><td class="codekolom"></td><td class="codekolom">3359</td><td class="bredecode">+ var difference = function difference(array) {</td></tr><tr><td class="codekolom">3314</td><td class="codekolom">3360</td><td class="bredecode"> var index = -1,</td></tr><tr><td class="codekolom">3315</td><td class="codekolom">3361</td><td class="bredecode"> indexOf = getIndexOf(),</td></tr><tr><td class="codekolom">3316</td><td class="codekolom">3362</td><td class="bredecode"> length = array ? array.length : 0,</td></tr><tr><td class="codekolom">3317</td><td class="codekolom">3363</td><td class="bredecode"> seen = concat.apply(arrayRef, nativeSlice.call(arguments, 1)),</td></tr><tr><td class="codekolom">3318</td><td class="codekolom">3364</td><td class="bredecode"> result = [];</td></tr><tr><td class="codekolom">3319</td><td class="codekolom">3365</td><td class="bredecode"> </td></tr><tr><td class="codekolom">3320</td><td class="codekolom">3366</td><td class="bredecode"> var isLarge = length &gt;= largeArraySize &amp;&amp; indexOf === basicIndexOf;</td></tr><tr><td class="codekolom">3321</td><td class="codekolom">3367</td><td class="bredecode"> </td></tr><tr><td class="codekolom">3322</td><td class="codekolom">3368</td><td class="bredecode"> if (isLarge) {</td></tr><tr><td class="codekolom">3323</td><td class="codekolom">3369</td><td class="bredecode"> var cache = createCache(seen);</td></tr><tr><td class="codekolom">3324</td><td class="codekolom">3370</td><td class="bredecode"> if (cache) {</td></tr><tr><td class="codekolom">3325</td><td class="codekolom">3371</td><td class="bredecode"> indexOf = cacheIndexOf;</td></tr><tr><td class="codekolom">3326</td><td class="codekolom">3372</td><td class="bredecode"> seen = cache;</td></tr><tr><td class="codekolom">3327</td><td class="codekolom">3373</td><td class="bredecode"> } else {</td></tr><tr><td class="codekolom">3328</td><td class="codekolom">3374</td><td class="bredecode"> isLarge = false;</td></tr><tr><td class="codekolom">3329</td><td class="codekolom">3375</td><td class="bredecode"> }</td></tr><tr><td class="codekolom">3330</td><td class="codekolom">3376</td><td class="bredecode"> }</td></tr><tr><td class="codekolom">3331</td><td class="codekolom">3377</td><td class="bredecode"> while (++index &lt; length) {</td></tr><tr><td class="codekolom">3332</td><td class="codekolom">3378</td><td class="bredecode"> var value = array[index];</td></tr><tr><td class="codekolom">3333</td><td class="codekolom">3379</td><td class="bredecode"> if (indexOf(seen, value) &lt; 0) {</td></tr><tr><td class="codekolom">3334</td><td class="codekolom">3380</td><td class="bredecode"> result.push(value);</td></tr><tr><td class="codekolom">3335</td><td class="codekolom">3381</td><td class="bredecode"> }</td></tr><tr><td class="codekolom">3336</td><td class="codekolom">3382</td><td class="bredecode"> }</td></tr><tr><td class="codekolom">3337</td><td class="codekolom">3383</td><td class="bredecode"> if (isLarge) {</td></tr><tr><td class="codekolom">3338</td><td class="codekolom">3384</td><td class="bredecode"> releaseObject(seen);</td></tr><tr><td class="codekolom">3339</td><td class="codekolom">3385</td><td class="bredecode"> }</td></tr><tr><td class="codekolom">3340</td><td class="codekolom">3386</td><td class="bredecode"> return result;</td></tr><tr class="del"><td class="codekolom">3341</td><td class="codekolom"></td><td class="bredecode">- }</td></tr><tr class="add"><td class="codekolom"></td><td class="codekolom">3387</td><td class="bredecode">+ }.autoCurry(2);</td></tr><tr><td class="codekolom">3342</td><td class="codekolom">3388</td><td class="bredecode"> </td></tr><tr><td class="codekolom">3343</td><td class="codekolom">3389</td><td class="bredecode"> /**</td></tr><tr><td class="codekolom">3344</td><td class="codekolom">3390</td><td class="bredecode"> * This method is similar to `_.find`, except that it returns the index of</td></tr><tr><td class="codekolom">3345</td><td class="codekolom">3391</td><td class="bredecode"> * the element that passes the callback check, instead of the element itself.</td></tr><tr><td class="codekolom">3346</td><td class="codekolom">3392</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">3347</td><td class="codekolom">3393</td><td class="bredecode"> * @static</td></tr><tr><td class="codekolom">3348</td><td class="codekolom">3394</td><td class="bredecode"> * @memberOf _</td></tr><tr><td class="codekolom">3349</td><td class="codekolom">3395</td><td class="bredecode"> * @category Arrays</td></tr><tr><td class="codekolom">3350</td><td class="codekolom">3396</td><td class="bredecode"> * @param {Array} array The array to search.</td></tr><tr><td class="codekolom">3351</td><td class="codekolom">3397</td><td class="bredecode"> * @param {Function|Object|String} [callback=identity] The function called per</td></tr><tr><td class="codekolom">3352</td><td class="codekolom">3398</td><td class="bredecode"> * iteration. If a property name or object is passed, it will be used to create</td></tr><tr><td class="codekolom">3353</td><td class="codekolom">3399</td><td class="bredecode"> * a "_.pluck" or "_.where" style callback, respectively.</td></tr><tr><td class="codekolom">3354</td><td class="codekolom">3400</td><td class="bredecode"> * @param {Mixed} [thisArg] The `this` binding of `callback`.</td></tr><tr><td class="codekolom">3355</td><td class="codekolom">3401</td><td class="bredecode"> * @returns {Mixed} Returns the index of the found element, else `-1`.</td></tr><tr><td class="codekolom">3356</td><td class="codekolom">3402</td><td class="bredecode"> * @example</td></tr><tr><td class="codekolom">3357</td><td class="codekolom">3403</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">3358</td><td class="codekolom">3404</td><td class="bredecode"> * _.findIndex(['apple', 'banana', 'beet'], function(food) {</td></tr><tr><td class="codekolom">3359</td><td class="codekolom">3405</td><td class="bredecode"> * return /^b/.test(food);</td></tr><tr><td class="codekolom">3360</td><td class="codekolom">3406</td><td class="bredecode"> * });</td></tr><tr><td class="codekolom">3361</td><td class="codekolom">3407</td><td class="bredecode"> * // =&gt; 1</td></tr><tr><td class="codekolom">3362</td><td class="codekolom">3408</td><td class="bredecode"> */</td></tr><tr class="del"><td class="codekolom">3363</td><td class="codekolom"></td><td class="bredecode">- function findIndex(array, callback, thisArg) {</td></tr><tr class="add"><td class="codekolom"></td><td class="codekolom">3409</td><td class="bredecode">+ var findIndex = function findIndex(callback, array, thisArg) {</td></tr><tr><td class="codekolom">3364</td><td class="codekolom">3410</td><td class="bredecode"> var index = -1,</td></tr><tr><td class="codekolom">3365</td><td class="codekolom">3411</td><td class="bredecode"> length = array ? array.length : 0;</td></tr><tr><td class="codekolom">3366</td><td class="codekolom">3412</td><td class="bredecode"> </td></tr><tr><td class="codekolom">3367</td><td class="codekolom">3413</td><td class="bredecode"> callback = lodash.createCallback(callback, thisArg);</td></tr><tr><td class="codekolom">3368</td><td class="codekolom">3414</td><td class="bredecode"> while (++index &lt; length) {</td></tr><tr><td class="codekolom">3369</td><td class="codekolom">3415</td><td class="bredecode"> if (callback(array[index], index, array)) {</td></tr><tr><td class="codekolom">3370</td><td class="codekolom">3416</td><td class="bredecode"> return index;</td></tr><tr><td class="codekolom">3371</td><td class="codekolom">3417</td><td class="bredecode"> }</td></tr><tr><td class="codekolom">3372</td><td class="codekolom">3418</td><td class="bredecode"> }</td></tr><tr><td class="codekolom">3373</td><td class="codekolom">3419</td><td class="bredecode"> return -1;</td></tr><tr class="del"><td class="codekolom">3374</td><td class="codekolom"></td><td class="bredecode">- }</td></tr><tr class="add"><td class="codekolom"></td><td class="codekolom">3420</td><td class="bredecode">+ }.autoCurry(2)</td></tr><tr><td class="codekolom">3375</td><td class="codekolom">3421</td><td class="bredecode"> </td></tr><tr><td class="codekolom">3376</td><td class="codekolom">3422</td><td class="bredecode"> /**</td></tr><tr><td class="codekolom">3377</td><td class="codekolom">3423</td><td class="bredecode"> * Gets the first element of the `array`. If a number `n` is passed, the first</td></tr><tr><td class="codekolom">3378</td><td class="codekolom">3424</td><td class="bredecode"> * `n` elements of the `array` are returned. If a `callback` function is passed,</td></tr><tr><td class="codekolom">3379</td><td class="codekolom">3425</td><td class="bredecode"> * elements at the beginning of the array are returned as long as the `callback`</td></tr><tr><td class="codekolom">3380</td><td class="codekolom">3426</td><td class="bredecode"> * returns truthy. The `callback` is bound to `thisArg` and invoked with three</td></tr><tr><td class="codekolom">3381</td><td class="codekolom">3427</td><td class="bredecode"> * arguments; (value, index, array).</td></tr><tr><td class="codekolom">3382</td><td class="codekolom">3428</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">3383</td><td class="codekolom">3429</td><td class="bredecode"> * If a property name is passed for `callback`, the created "_.pluck" style</td></tr><tr><td class="codekolom">3384</td><td class="codekolom">3430</td><td class="bredecode"> * callback will return the property value of the given element.</td></tr><tr><td class="codekolom">3385</td><td class="codekolom">3431</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">3386</td><td class="codekolom">3432</td><td class="bredecode"> * If an object is passed for `callback`, the created "_.where" style callback</td></tr><tr><td class="codekolom">3387</td><td class="codekolom">3433</td><td class="bredecode"> * will return `true` for elements that have the properties of the given object,</td></tr><tr><td class="codekolom">3388</td><td class="codekolom">3434</td><td class="bredecode"> * else `false`.</td></tr><tr><td class="codekolom">3389</td><td class="codekolom">3435</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">3390</td><td class="codekolom">3436</td><td class="bredecode"> * @static</td></tr><tr><td class="codekolom">3391</td><td class="codekolom">3437</td><td class="bredecode"> * @memberOf _</td></tr><tr><td class="codekolom">3392</td><td class="codekolom">3438</td><td class="bredecode"> * @alias head, take</td></tr><tr><td class="codekolom">3393</td><td class="codekolom">3439</td><td class="bredecode"> * @category Arrays</td></tr><tr><td class="codekolom">3394</td><td class="codekolom">3440</td><td class="bredecode"> * @param {Array} array The array to query.</td></tr><tr><td class="codekolom">3395</td><td class="codekolom">3441</td><td class="bredecode"> * @param {Function|Object|Number|String} [callback|n] The function called</td></tr><tr><td class="codekolom">3396</td><td class="codekolom">3442</td><td class="bredecode"> * per element or the number of elements to return. If a property name or</td></tr><tr><td class="codekolom">3397</td><td class="codekolom">3443</td><td class="bredecode"> * object is passed, it will be used to create a "_.pluck" or "_.where"</td></tr><tr><td class="codekolom">3398</td><td class="codekolom">3444</td><td class="bredecode"> * style callback, respectively.</td></tr><tr><td class="codekolom">3399</td><td class="codekolom">3445</td><td class="bredecode"> * @param {Mixed} [thisArg] The `this` binding of `callback`.</td></tr><tr><td class="codekolom">3400</td><td class="codekolom">3446</td><td class="bredecode"> * @returns {Mixed} Returns the first element(s) of `array`.</td></tr><tr><td class="codekolom">3401</td><td class="codekolom">3447</td><td class="bredecode"> * @example</td></tr><tr><td class="codekolom">3402</td><td class="codekolom">3448</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">3403</td><td class="codekolom">3449</td><td class="bredecode"> * _.first([1, 2, 3]);</td></tr><tr><td class="codekolom">3404</td><td class="codekolom">3450</td><td class="bredecode"> * // =&gt; 1</td></tr><tr><td class="codekolom">3405</td><td class="codekolom">3451</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">3406</td><td class="codekolom">3452</td><td class="bredecode"> * _.first([1, 2, 3], 2);</td></tr><tr><td class="codekolom">3407</td><td class="codekolom">3453</td><td class="bredecode"> * // =&gt; [1, 2]</td></tr><tr><td class="codekolom">3408</td><td class="codekolom">3454</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">3409</td><td class="codekolom">3455</td><td class="bredecode"> * _.first([1, 2, 3], function(num) {</td></tr><tr><td class="codekolom">3410</td><td class="codekolom">3456</td><td class="bredecode"> * return num &lt; 3;</td></tr><tr><td class="codekolom">3411</td><td class="codekolom">3457</td><td class="bredecode"> * });</td></tr><tr><td class="codekolom">3412</td><td class="codekolom">3458</td><td class="bredecode"> * // =&gt; [1, 2]</td></tr><tr><td class="codekolom">3413</td><td class="codekolom">3459</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">3414</td><td class="codekolom">3460</td><td class="bredecode"> * var food = [</td></tr><tr><td class="codekolom">3415</td><td class="codekolom">3461</td><td class="bredecode"> * { 'name': 'banana', 'organic': true },</td></tr><tr><td class="codekolom">3416</td><td class="codekolom">3462</td><td class="bredecode"> * { 'name': 'beet', 'organic': false },</td></tr><tr><td class="codekolom">3417</td><td class="codekolom">3463</td><td class="bredecode"> * ];</td></tr><tr><td class="codekolom">3418</td><td class="codekolom">3464</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">3419</td><td class="codekolom">3465</td><td class="bredecode"> * // using "_.pluck" callback shorthand</td></tr><tr><td class="codekolom">3420</td><td class="codekolom">3466</td><td class="bredecode"> * _.first(food, 'organic');</td></tr><tr><td class="codekolom">3421</td><td class="codekolom">3467</td><td class="bredecode"> * // =&gt; [{ 'name': 'banana', 'organic': true }]</td></tr><tr><td class="codekolom">3422</td><td class="codekolom">3468</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">3423</td><td class="codekolom">3469</td><td class="bredecode"> * var food = [</td></tr><tr><td class="codekolom">3424</td><td class="codekolom">3470</td><td class="bredecode"> * { 'name': 'apple', 'type': 'fruit' },</td></tr><tr><td class="codekolom">3425</td><td class="codekolom">3471</td><td class="bredecode"> * { 'name': 'banana', 'type': 'fruit' },</td></tr><tr><td class="codekolom">3426</td><td class="codekolom">3472</td><td class="bredecode"> * { 'name': 'beet', 'type': 'vegetable' }</td></tr><tr><td class="codekolom">3427</td><td class="codekolom">3473</td><td class="bredecode"> * ];</td></tr><tr><td class="codekolom">3428</td><td class="codekolom">3474</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">3429</td><td class="codekolom">3475</td><td class="bredecode"> * // using "_.where" callback shorthand</td></tr><tr><td class="codekolom">3430</td><td class="codekolom">3476</td><td class="bredecode"> * _.first(food, { 'type': 'fruit' });</td></tr><tr><td class="codekolom">3431</td><td class="codekolom">3477</td><td class="bredecode"> * // =&gt; [{ 'name': 'apple', 'type': 'fruit' }, { 'name': 'banana', 'type': 'fruit' }]</td></tr><tr><td class="codekolom">3432</td><td class="codekolom">3478</td><td class="bredecode"> */</td></tr><tr class="del"><td class="codekolom">3433</td><td class="codekolom"></td><td class="bredecode">- function first(array, callback, thisArg) {</td></tr><tr class="del"><td class="codekolom">3434</td><td class="codekolom"></td><td class="bredecode">- if (array) {</td></tr><tr class="del"><td class="codekolom">3435</td><td class="codekolom"></td><td class="bredecode">- var n = 0,</td></tr><tr class="del"><td class="codekolom">3436</td><td class="codekolom"></td><td class="bredecode">- length = array.length;</td></tr><tr><td class="codekolom">3437</td><td class="codekolom">3479</td><td class="bredecode"> </td></tr><tr class="del"><td class="codekolom">3438</td><td class="codekolom"></td><td class="bredecode">- if (typeof callback != 'number' &amp;&amp; callback != null) {</td></tr><tr class="del"><td class="codekolom">3439</td><td class="codekolom"></td><td class="bredecode">- var index = -1;</td></tr><tr class="del"><td class="codekolom">3440</td><td class="codekolom"></td><td class="bredecode">- callback = lodash.createCallback(callback, thisArg);</td></tr><tr class="del"><td class="codekolom">3441</td><td class="codekolom"></td><td class="bredecode">- while (++index &lt; length &amp;&amp; callback(array[index], index, array)) {</td></tr><tr class="del"><td class="codekolom">3442</td><td class="codekolom"></td><td class="bredecode">- n++;</td></tr><tr class="del"><td class="codekolom">3443</td><td class="codekolom"></td><td class="bredecode">- }</td></tr><tr class="del"><td class="codekolom">3444</td><td class="codekolom"></td><td class="bredecode">- } else {</td></tr><tr class="del"><td class="codekolom">3445</td><td class="codekolom"></td><td class="bredecode">- n = callback;</td></tr><tr class="del"><td class="codekolom">3446</td><td class="codekolom"></td><td class="bredecode">- if (n == null || thisArg) {</td></tr><tr class="del"><td class="codekolom">3447</td><td class="codekolom"></td><td class="bredecode">- return array[0];</td></tr><tr class="del"><td class="codekolom">3448</td><td class="codekolom"></td><td class="bredecode">- }</td></tr><tr class="del"><td class="codekolom">3449</td><td class="codekolom"></td><td class="bredecode">- }</td></tr><tr class="del"><td class="codekolom">3450</td><td class="codekolom"></td><td class="bredecode">- return slice(array, 0, nativeMin(nativeMax(0, n), length));</td></tr><tr class="del"><td class="codekolom">3451</td><td class="codekolom"></td><td class="bredecode">- }</td></tr><tr class="add"><td class="codekolom"></td><td class="codekolom">3480</td><td class="bredecode">+ function first(array) {</td></tr><tr class="add"><td class="codekolom"></td><td class="codekolom">3481</td><td class="bredecode">+ if(array){</td></tr><tr class="add"><td class="codekolom"></td><td class="codekolom">3482</td><td class="bredecode">+ return array[0];</td></tr><tr class="add"><td class="codekolom"></td><td class="codekolom">3483</td><td class="bredecode">+ }</td></tr><tr><td class="codekolom">3452</td><td class="codekolom">3484</td><td class="bredecode"> }</td></tr><tr class="add"><td class="codekolom"></td><td class="codekolom">3485</td><td class="bredecode">+ </td></tr><tr class="add"><td class="codekolom"></td><td class="codekolom">3486</td><td class="bredecode">+ var take = function take(n, array, callback) {</td></tr><tr class="add"><td class="codekolom"></td><td class="codekolom">3487</td><td class="bredecode">+ return slice(array, 0, nativeMin(nativeMax(0, n), array.length));</td></tr><tr class="add"><td class="codekolom"></td><td class="codekolom">3488</td><td class="bredecode">+ }.autoCurry(2);</td></tr><tr><td class="codekolom">3453</td><td class="codekolom">3489</td><td class="bredecode"> </td></tr><tr><td class="codekolom">3454</td><td class="codekolom">3490</td><td class="bredecode"> /**</td></tr><tr><td class="codekolom">3455</td><td class="codekolom">3491</td><td class="bredecode"> * Flattens a nested array (the nesting can be to any depth). If `isShallow`</td></tr><tr><td class="codekolom">3456</td><td class="codekolom">3492</td><td class="bredecode"> * is truthy, `array` will only be flattened a single level. If `callback`</td></tr><tr><td class="codekolom">3457</td><td class="codekolom">3493</td><td class="bredecode"> * is passed, each element of `array` is passed through a `callback` before</td></tr><tr><td class="codekolom">3458</td><td class="codekolom">3494</td><td class="bredecode"> * flattening. The `callback` is bound to `thisArg` and invoked with three</td></tr><tr><td class="codekolom">3459</td><td class="codekolom">3495</td><td class="bredecode"> * arguments; (value, index, array).</td></tr><tr><td class="codekolom">3460</td><td class="codekolom">3496</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">3461</td><td class="codekolom">3497</td><td class="bredecode"> * If a property name is passed for `callback`, the created "_.pluck" style</td></tr><tr><td class="codekolom">3462</td><td class="codekolom">3498</td><td class="bredecode"> * callback will return the property value of the given element.</td></tr><tr><td class="codekolom">3463</td><td class="codekolom">3499</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">3464</td><td class="codekolom">3500</td><td class="bredecode"> * If an object is passed for `callback`, the created "_.where" style callback</td></tr><tr><td class="codekolom">3465</td><td class="codekolom">3501</td><td class="bredecode"> * will return `true` for elements that have the properties of the given object,</td></tr><tr><td class="codekolom">3466</td><td class="codekolom">3502</td><td class="bredecode"> * else `false`.</td></tr><tr><td class="codekolom">3467</td><td class="codekolom">3503</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">3468</td><td class="codekolom">3504</td><td class="bredecode"> * @static</td></tr><tr><td class="codekolom">3469</td><td class="codekolom">3505</td><td class="bredecode"> * @memberOf _</td></tr><tr><td class="codekolom">3470</td><td class="codekolom">3506</td><td class="bredecode"> * @category Arrays</td></tr><tr><td class="codekolom">3471</td><td class="codekolom">3507</td><td class="bredecode"> * @param {Array} array The array to flatten.</td></tr><tr class="del"><td class="codekolom">3472</td><td class="codekolom"></td><td class="bredecode">- * @param {Boolean} [isShallow=false] A flag to indicate only flattening a single level.</td></tr><tr class="add"><td class="codekolom"></td><td class="codekolom">3508</td><td class="bredecode">+ * @param {Boolean} [isDeep=false] A flag to flatten past a single level.</td></tr><tr><td class="codekolom">3473</td><td class="codekolom">3509</td><td class="bredecode"> * @param {Function|Object|String} [callback=identity] The function called per</td></tr><tr><td class="codekolom">3474</td><td class="codekolom">3510</td><td class="bredecode"> * iteration. If a property name or object is passed, it will be used to create</td></tr><tr><td class="codekolom">3475</td><td class="codekolom">3511</td><td class="bredecode"> * a "_.pluck" or "_.where" style callback, respectively.</td></tr><tr><td class="codekolom">3476</td><td class="codekolom">3512</td><td class="bredecode"> * @param {Mixed} [thisArg] The `this` binding of `callback`.</td></tr><tr><td class="codekolom">3477</td><td class="codekolom">3513</td><td class="bredecode"> * @returns {Array} Returns a new flattened array.</td></tr><tr><td class="codekolom">3478</td><td class="codekolom">3514</td><td class="bredecode"> * @example</td></tr><tr><td class="codekolom">3479</td><td class="codekolom">3515</td><td class="bredecode"> *</td></tr><tr class="del"><td class="codekolom">3480</td><td class="codekolom"></td><td class="bredecode">- * _.flatten([1, [2], [3, [[4]]]]);</td></tr><tr class="add"><td class="codekolom"></td><td class="codekolom">3516</td><td class="bredecode">+ * _.flatten([1, [2], [3, [[4]]]], true);</td></tr><tr><td class="codekolom">3481</td><td class="codekolom">3517</td><td class="bredecode"> * // =&gt; [1, 2, 3, 4];</td></tr><tr><td class="codekolom">3482</td><td class="codekolom">3518</td><td class="bredecode"> *</td></tr><tr class="del"><td class="codekolom">3483</td><td class="codekolom"></td><td class="bredecode">- * _.flatten([1, [2], [3, [[4]]]], true);</td></tr><tr class="add"><td class="codekolom"></td><td class="codekolom">3519</td><td class="bredecode">+ * _.flatten([1, [2], [3, [[4]]]]);</td></tr><tr><td class="codekolom">3484</td><td class="codekolom">3520</td><td class="bredecode"> * // =&gt; [1, 2, 3, [[4]]];</td></tr><tr><td class="codekolom">3485</td><td class="codekolom">3521</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">3486</td><td class="codekolom">3522</td><td class="bredecode"> * var stooges = [</td></tr><tr><td class="codekolom">3487</td><td class="codekolom">3523</td><td class="bredecode"> * { 'name': 'curly', 'quotes': ['Oh, a wise guy, eh?', 'Poifect!'] },</td></tr><tr><td class="codekolom">3488</td><td class="codekolom">3524</td><td class="bredecode"> * { 'name': 'moe', 'quotes': ['Spread out!', 'You knucklehead!'] }</td></tr><tr><td class="codekolom">3489</td><td class="codekolom">3525</td><td class="bredecode"> * ];</td></tr><tr><td class="codekolom">3490</td><td class="codekolom">3526</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">3491</td><td class="codekolom">3527</td><td class="bredecode"> * // using "_.pluck" callback shorthand</td></tr><tr><td class="codekolom">3492</td><td class="codekolom">3528</td><td class="bredecode"> * _.flatten(stooges, 'quotes');</td></tr><tr><td class="codekolom">3493</td><td class="codekolom">3529</td><td class="bredecode"> * // =&gt; ['Oh, a wise guy, eh?', 'Poifect!', 'Spread out!', 'You knucklehead!']</td></tr><tr><td class="codekolom">3494</td><td class="codekolom">3530</td><td class="bredecode"> */</td></tr><tr class="del"><td class="codekolom">3495</td><td class="codekolom"></td><td class="bredecode">- var flatten = overloadWrapper(function flatten(array, isShallow, callback) {</td></tr><tr class="add"><td class="codekolom"></td><td class="codekolom">3531</td><td class="bredecode">+ var flatten = function flatten(array) {</td></tr><tr><td class="codekolom">3496</td><td class="codekolom">3532</td><td class="bredecode"> var index = -1,</td></tr><tr><td class="codekolom">3497</td><td class="codekolom">3533</td><td class="bredecode"> length = array ? array.length : 0,</td></tr><tr><td class="codekolom">3498</td><td class="codekolom">3534</td><td class="bredecode"> result = [];</td></tr><tr><td class="codekolom">3499</td><td class="codekolom">3535</td><td class="bredecode"> </td></tr><tr><td class="codekolom">3500</td><td class="codekolom">3536</td><td class="bredecode"> while (++index &lt; length) {</td></tr><tr><td class="codekolom">3501</td><td class="codekolom">3537</td><td class="bredecode"> var value = array[index];</td></tr><tr class="del"><td class="codekolom">3502</td><td class="codekolom"></td><td class="bredecode">- if (callback) {</td></tr><tr class="del"><td class="codekolom">3503</td><td class="codekolom"></td><td class="bredecode">- value = callback(value, index, array);</td></tr><tr class="add"><td class="codekolom"></td><td class="codekolom">3538</td><td class="bredecode">+ </td></tr><tr class="add"><td class="codekolom"></td><td class="codekolom">3539</td><td class="bredecode">+ if (isArray(value)) {</td></tr><tr class="add"><td class="codekolom"></td><td class="codekolom">3540</td><td class="bredecode">+ push.apply(result, value);</td></tr><tr class="add"><td class="codekolom"></td><td class="codekolom">3541</td><td class="bredecode">+ } else {</td></tr><tr class="add"><td class="codekolom"></td><td class="codekolom">3542</td><td class="bredecode">+ result.push(value);</td></tr><tr><td class="codekolom">3504</td><td class="codekolom">3543</td><td class="bredecode"> }</td></tr><tr class="add"><td class="codekolom"></td><td class="codekolom">3544</td><td class="bredecode">+ }</td></tr><tr class="add"><td class="codekolom"></td><td class="codekolom">3545</td><td class="bredecode">+ return result;</td></tr><tr class="add"><td class="codekolom"></td><td class="codekolom">3546</td><td class="bredecode">+ };</td></tr><tr class="add"><td class="codekolom"></td><td class="codekolom">3547</td><td class="bredecode">+ </td></tr><tr class="add"><td class="codekolom"></td><td class="codekolom">3548</td><td class="bredecode">+ var flattenDeep = function flattenDeep(array, callback) {</td></tr><tr class="add"><td class="codekolom"></td><td class="codekolom">3549</td><td class="bredecode">+ var index = -1,</td></tr><tr class="add"><td class="codekolom"></td><td class="codekolom">3550</td><td class="bredecode">+ length = array ? array.length : 0,</td></tr><tr class="add"><td class="codekolom"></td><td class="codekolom">3551</td><td class="bredecode">+ result = [];</td></tr><tr class="add"><td class="codekolom"></td><td class="codekolom">3552</td><td class="bredecode">+ </td></tr><tr class="add"><td class="codekolom"></td><td class="codekolom">3553</td><td class="bredecode">+ while (++index &lt; length) {</td></tr><tr class="add"><td class="codekolom"></td><td class="codekolom">3554</td><td class="bredecode">+ var value = array[index];</td></tr><tr class="add"><td class="codekolom"></td><td class="codekolom">3555</td><td class="bredecode">+ </td></tr><tr><td class="codekolom">3505</td><td class="codekolom">3556</td><td class="bredecode"> // recursively flatten arrays (susceptible to call stack limits)</td></tr><tr><td class="codekolom">3506</td><td class="codekolom">3557</td><td class="bredecode"> if (isArray(value)) {</td></tr><tr class="del"><td class="codekolom">3507</td><td class="codekolom"></td><td class="bredecode">- push.apply(result, isShallow ? value : flatten(value));</td></tr><tr class="add"><td class="codekolom"></td><td class="codekolom">3558</td><td class="bredecode">+ push.apply(result, flatten(value));</td></tr><tr><td class="codekolom">3508</td><td class="codekolom">3559</td><td class="bredecode"> } else {</td></tr><tr><td class="codekolom">3509</td><td class="codekolom">3560</td><td class="bredecode"> result.push(value);</td></tr><tr><td class="codekolom">3510</td><td class="codekolom">3561</td><td class="bredecode"> }</td></tr><tr><td class="codekolom">3511</td><td class="codekolom">3562</td><td class="bredecode"> }</td></tr><tr><td class="codekolom">3512</td><td class="codekolom">3563</td><td class="bredecode"> return result;</td></tr><tr class="del"><td class="codekolom">3513</td><td class="codekolom"></td><td class="bredecode">- });</td></tr><tr class="add"><td class="codekolom"></td><td class="codekolom">3564</td><td class="bredecode">+ };</td></tr><tr><td class="codekolom">3514</td><td class="codekolom">3565</td><td class="bredecode"> </td></tr><tr><td class="codekolom">3515</td><td class="codekolom">3566</td><td class="bredecode"> /**</td></tr><tr><td class="codekolom">3516</td><td class="codekolom">3567</td><td class="bredecode"> * Gets the index at which the first occurrence of `value` is found using</td></tr><tr><td class="codekolom">3517</td><td class="codekolom">3568</td><td class="bredecode"> * strict equality for comparisons, i.e. `===`. If the `array` is already</td></tr><tr><td class="codekolom">3518</td><td class="codekolom">3569</td><td class="bredecode"> * sorted, passing `true` for `fromIndex` will run a faster binary search.</td></tr><tr><td class="codekolom">3519</td><td class="codekolom">3570</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">3520</td><td class="codekolom">3571</td><td class="bredecode"> * @static</td></tr><tr><td class="codekolom">3521</td><td class="codekolom">3572</td><td class="bredecode"> * @memberOf _</td></tr><tr><td class="codekolom">3522</td><td class="codekolom">3573</td><td class="bredecode"> * @category Arrays</td></tr><tr><td class="codekolom">3523</td><td class="codekolom">3574</td><td class="bredecode"> * @param {Array} array The array to search.</td></tr><tr><td class="codekolom">3524</td><td class="codekolom">3575</td><td class="bredecode"> * @param {Mixed} value The value to search for.</td></tr><tr><td class="codekolom">3525</td><td class="codekolom">3576</td><td class="bredecode"> * @param {Boolean|Number} [fromIndex=0] The index to search from or `true` to</td></tr><tr><td class="codekolom">3526</td><td class="codekolom">3577</td><td class="bredecode"> * perform a binary search on a sorted `array`.</td></tr><tr><td class="codekolom">3527</td><td class="codekolom">3578</td><td class="bredecode"> * @returns {Number} Returns the index of the matched value or `-1`.</td></tr><tr><td class="codekolom">3528</td><td class="codekolom">3579</td><td class="bredecode"> * @example</td></tr><tr><td class="codekolom">3529</td><td class="codekolom">3580</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">3530</td><td class="codekolom">3581</td><td class="bredecode"> * _.indexOf([1, 2, 3, 1, 2, 3], 2);</td></tr><tr><td class="codekolom">3531</td><td class="codekolom">3582</td><td class="bredecode"> * // =&gt; 1</td></tr><tr><td class="codekolom">3532</td><td class="codekolom">3583</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">3533</td><td class="codekolom">3584</td><td class="bredecode"> * _.indexOf([1, 2, 3, 1, 2, 3], 2, 3);</td></tr><tr><td class="codekolom">3534</td><td class="codekolom">3585</td><td class="bredecode"> * // =&gt; 4</td></tr><tr><td class="codekolom">3535</td><td class="codekolom">3586</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">3536</td><td class="codekolom">3587</td><td class="bredecode"> * _.indexOf([1, 1, 2, 2, 3, 3], 2, true);</td></tr><tr><td class="codekolom">3537</td><td class="codekolom">3588</td><td class="bredecode"> * // =&gt; 2</td></tr><tr><td class="codekolom">3538</td><td class="codekolom">3589</td><td class="bredecode"> */</td></tr><tr class="del"><td class="codekolom">3539</td><td class="codekolom"></td><td class="bredecode">- function indexOf(array, value, fromIndex) {</td></tr><tr class="add"><td class="codekolom"></td><td class="codekolom">3590</td><td class="bredecode">+ var indexOf = function indexOf(value, array, fromIndex) {</td></tr><tr><td class="codekolom">3540</td><td class="codekolom">3591</td><td class="bredecode"> if (typeof fromIndex == 'number') {</td></tr><tr><td class="codekolom">3541</td><td class="codekolom">3592</td><td class="bredecode"> var length = array ? array.length : 0;</td></tr><tr><td class="codekolom">3542</td><td class="codekolom">3593</td><td class="bredecode"> fromIndex = (fromIndex &lt; 0 ? nativeMax(0, length + fromIndex) : fromIndex || 0);</td></tr><tr><td class="codekolom">3543</td><td class="codekolom">3594</td><td class="bredecode"> } else if (fromIndex) {</td></tr><tr><td class="codekolom">3544</td><td class="codekolom">3595</td><td class="bredecode"> var index = sortedIndex(array, value);</td></tr><tr><td class="codekolom">3545</td><td class="codekolom">3596</td><td class="bredecode"> return array[index] === value ? index : -1;</td></tr><tr><td class="codekolom">3546</td><td class="codekolom">3597</td><td class="bredecode"> }</td></tr><tr><td class="codekolom">3547</td><td class="codekolom">3598</td><td class="bredecode"> return array ? basicIndexOf(array, value, fromIndex) : -1;</td></tr><tr class="del"><td class="codekolom">3548</td><td class="codekolom"></td><td class="bredecode">- }</td></tr><tr class="add"><td class="codekolom"></td><td class="codekolom">3599</td><td class="bredecode">+ }.autoCurry(2);</td></tr><tr><td class="codekolom">3549</td><td class="codekolom">3600</td><td class="bredecode"> </td></tr><tr><td class="codekolom">3550</td><td class="codekolom">3601</td><td class="bredecode"> /**</td></tr><tr><td class="codekolom">3551</td><td class="codekolom">3602</td><td class="bredecode"> * Gets all but the last element of `array`. If a number `n` is passed, the</td></tr><tr><td class="codekolom">3552</td><td class="codekolom">3603</td><td class="bredecode"> * last `n` elements are excluded from the result. If a `callback` function</td></tr><tr><td class="codekolom">3553</td><td class="codekolom">3604</td><td class="bredecode"> * is passed, elements at the end of the array are excluded from the result</td></tr><tr><td class="codekolom">3554</td><td class="codekolom">3605</td><td class="bredecode"> * as long as the `callback` returns truthy. The `callback` is bound to</td></tr><tr><td class="codekolom">3555</td><td class="codekolom">3606</td><td class="bredecode"> * `thisArg` and invoked with three arguments; (value, index, array).</td></tr><tr><td class="codekolom">3556</td><td class="codekolom">3607</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">3557</td><td class="codekolom">3608</td><td class="bredecode"> * If a property name is passed for `callback`, the created "_.pluck" style</td></tr><tr><td class="codekolom">3558</td><td class="codekolom">3609</td><td class="bredecode"> * callback will return the property value of the given element.</td></tr><tr><td class="codekolom">3559</td><td class="codekolom">3610</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">3560</td><td class="codekolom">3611</td><td class="bredecode"> * If an object is passed for `callback`, the created "_.where" style callback</td></tr><tr><td class="codekolom">3561</td><td class="codekolom">3612</td><td class="bredecode"> * will return `true` for elements that have the properties of the given object,</td></tr><tr><td class="codekolom">3562</td><td class="codekolom">3613</td><td class="bredecode"> * else `false`.</td></tr><tr><td class="codekolom">3563</td><td class="codekolom">3614</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">3564</td><td class="codekolom">3615</td><td class="bredecode"> * @static</td></tr><tr><td class="codekolom">3565</td><td class="codekolom">3616</td><td class="bredecode"> * @memberOf _</td></tr><tr><td class="codekolom">3566</td><td class="codekolom">3617</td><td class="bredecode"> * @category Arrays</td></tr><tr><td class="codekolom">3567</td><td class="codekolom">3618</td><td class="bredecode"> * @param {Array} array The array to query.</td></tr><tr><td class="codekolom">3568</td><td class="codekolom">3619</td><td class="bredecode"> * @param {Function|Object|Number|String} [callback|n=1] The function called</td></tr><tr><td class="codekolom">3569</td><td class="codekolom">3620</td><td class="bredecode"> * per element or the number of elements to exclude. If a property name or</td></tr><tr><td class="codekolom">3570</td><td class="codekolom">3621</td><td class="bredecode"> * object is passed, it will be used to create a "_.pluck" or "_.where"</td></tr><tr><td class="codekolom">3571</td><td class="codekolom">3622</td><td class="bredecode"> * style callback, respectively.</td></tr><tr><td class="codekolom">3572</td><td class="codekolom">3623</td><td class="bredecode"> * @param {Mixed} [thisArg] The `this` binding of `callback`.</td></tr><tr><td class="codekolom">3573</td><td class="codekolom">3624</td><td class="bredecode"> * @returns {Array} Returns a slice of `array`.</td></tr><tr><td class="codekolom">3574</td><td class="codekolom">3625</td><td class="bredecode"> * @example</td></tr><tr><td class="codekolom">3575</td><td class="codekolom">3626</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">3576</td><td class="codekolom">3627</td><td class="bredecode"> * _.initial([1, 2, 3]);</td></tr><tr><td class="codekolom">3577</td><td class="codekolom">3628</td><td class="bredecode"> * // =&gt; [1, 2]</td></tr><tr><td class="codekolom">3578</td><td class="codekolom">3629</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">3579</td><td class="codekolom">3630</td><td class="bredecode"> * _.initial([1, 2, 3], 2);</td></tr><tr><td class="codekolom">3580</td><td class="codekolom">3631</td><td class="bredecode"> * // =&gt; [1]</td></tr><tr><td class="codekolom">3581</td><td class="codekolom">3632</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">3582</td><td class="codekolom">3633</td><td class="bredecode"> * _.initial([1, 2, 3], function(num) {</td></tr><tr><td class="codekolom">3583</td><td class="codekolom">3634</td><td class="bredecode"> * return num &gt; 1;</td></tr><tr><td class="codekolom">3584</td><td class="codekolom">3635</td><td class="bredecode"> * });</td></tr><tr><td class="codekolom">3585</td><td class="codekolom">3636</td><td class="bredecode"> * // =&gt; [1]</td></tr><tr><td class="codekolom">3586</td><td class="codekolom">3637</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">3587</td><td class="codekolom">3638</td><td class="bredecode"> * var food = [</td></tr><tr><td class="codekolom">3588</td><td class="codekolom">3639</td><td class="bredecode"> * { 'name': 'beet', 'organic': false },</td></tr><tr><td class="codekolom">3589</td><td class="codekolom">3640</td><td class="bredecode"> * { 'name': 'carrot', 'organic': true }</td></tr><tr><td class="codekolom">3590</td><td class="codekolom">3641</td><td class="bredecode"> * ];</td></tr><tr><td class="codekolom">3591</td><td class="codekolom">3642</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">3592</td><td class="codekolom">3643</td><td class="bredecode"> * // using "_.pluck" callback shorthand</td></tr><tr><td class="codekolom">3593</td><td class="codekolom">3644</td><td class="bredecode"> * _.initial(food, 'organic');</td></tr><tr><td class="codekolom">3594</td><td class="codekolom">3645</td><td class="bredecode"> * // =&gt; [{ 'name': 'beet', 'organic': false }]</td></tr><tr><td class="codekolom">3595</td><td class="codekolom">3646</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">3596</td><td class="codekolom">3647</td><td class="bredecode"> * var food = [</td></tr><tr><td class="codekolom">3597</td><td class="codekolom">3648</td><td class="bredecode"> * { 'name': 'banana', 'type': 'fruit' },</td></tr><tr><td class="codekolom">3598</td><td class="codekolom">3649</td><td class="bredecode"> * { 'name': 'beet', 'type': 'vegetable' },</td></tr><tr><td class="codekolom">3599</td><td class="codekolom">3650</td><td class="bredecode"> * { 'name': 'carrot', 'type': 'vegetable' }</td></tr><tr><td class="codekolom">3600</td><td class="codekolom">3651</td><td class="bredecode"> * ];</td></tr><tr><td class="codekolom">3601</td><td class="codekolom">3652</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">3602</td><td class="codekolom">3653</td><td class="bredecode"> * // using "_.where" callback shorthand</td></tr><tr><td class="codekolom">3603</td><td class="codekolom">3654</td><td class="bredecode"> * _.initial(food, { 'type': 'vegetable' });</td></tr><tr><td class="codekolom">3604</td><td class="codekolom">3655</td><td class="bredecode"> * // =&gt; [{ 'name': 'banana', 'type': 'fruit' }]</td></tr><tr><td class="codekolom">3605</td><td class="codekolom">3656</td><td class="bredecode"> */</td></tr><tr class="del"><td class="codekolom">3606</td><td class="codekolom"></td><td class="bredecode">- function initial(array, callback, thisArg) {</td></tr><tr class="add"><td class="codekolom"></td><td class="codekolom">3657</td><td class="bredecode">+ var initial = function initial(array, callback, thisArg) {</td></tr><tr><td class="codekolom">3607</td><td class="codekolom">3658</td><td class="bredecode"> if (!array) {</td></tr><tr><td class="codekolom">3608</td><td class="codekolom">3659</td><td class="bredecode"> return [];</td></tr><tr><td class="codekolom">3609</td><td class="codekolom">3660</td><td class="bredecode"> }</td></tr><tr><td class="codekolom">3610</td><td class="codekolom">3661</td><td class="bredecode"> var n = 0,</td></tr><tr><td class="codekolom">3611</td><td class="codekolom">3662</td><td class="bredecode"> length = array.length;</td></tr><tr><td class="codekolom">3612</td><td class="codekolom">3663</td><td class="bredecode"> </td></tr><tr><td class="codekolom">3613</td><td class="codekolom">3664</td><td class="bredecode"> if (typeof callback != 'number' &amp;&amp; callback != null) {</td></tr><tr><td class="codekolom">3614</td><td class="codekolom">3665</td><td class="bredecode"> var index = length;</td></tr><tr><td class="codekolom">3615</td><td class="codekolom">3666</td><td class="bredecode"> callback = lodash.createCallback(callback, thisArg);</td></tr><tr><td class="codekolom">3616</td><td class="codekolom">3667</td><td class="bredecode"> while (index-- &amp;&amp; callback(array[index], index, array)) {</td></tr><tr><td class="codekolom">3617</td><td class="codekolom">3668</td><td class="bredecode"> n++;</td></tr><tr><td class="codekolom">3618</td><td class="codekolom">3669</td><td class="bredecode"> }</td></tr><tr><td class="codekolom">3619</td><td class="codekolom">3670</td><td class="bredecode"> } else {</td></tr><tr><td class="codekolom">3620</td><td class="codekolom">3671</td><td class="bredecode"> n = (callback == null || thisArg) ? 1 : callback || n;</td></tr><tr><td class="codekolom">3621</td><td class="codekolom">3672</td><td class="bredecode"> }</td></tr><tr><td class="codekolom">3622</td><td class="codekolom">3673</td><td class="bredecode"> return slice(array, 0, nativeMin(nativeMax(0, length - n), length));</td></tr><tr class="del"><td class="codekolom">3623</td><td class="codekolom"></td><td class="bredecode">- }</td></tr><tr class="add"><td class="codekolom"></td><td class="codekolom">3674</td><td class="bredecode">+ }.autoCurry(1);</td></tr><tr><td class="codekolom">3624</td><td class="codekolom">3675</td><td class="bredecode"> </td></tr><tr><td class="codekolom">3625</td><td class="codekolom">3676</td><td class="bredecode"> /**</td></tr><tr><td class="codekolom">3626</td><td class="codekolom">3677</td><td class="bredecode"> * Computes the intersection of all the passed-in arrays using strict equality</td></tr><tr><td class="codekolom">3627</td><td class="codekolom">3678</td><td class="bredecode"> * for comparisons, i.e. `===`.</td></tr><tr><td class="codekolom">3628</td><td class="codekolom">3679</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">3629</td><td class="codekolom">3680</td><td class="bredecode"> * @static</td></tr><tr><td class="codekolom">3630</td><td class="codekolom">3681</td><td class="bredecode"> * @memberOf _</td></tr><tr><td class="codekolom">3631</td><td class="codekolom">3682</td><td class="bredecode"> * @category Arrays</td></tr><tr><td class="codekolom">3632</td><td class="codekolom">3683</td><td class="bredecode"> * @param {Array} [array1, array2, ...] Arrays to process.</td></tr><tr><td class="codekolom">3633</td><td class="codekolom">3684</td><td class="bredecode"> * @returns {Array} Returns a new array of unique elements that are present</td></tr><tr><td class="codekolom">3634</td><td class="codekolom">3685</td><td class="bredecode"> * in **all** of the arrays.</td></tr><tr><td class="codekolom">3635</td><td class="codekolom">3686</td><td class="bredecode"> * @example</td></tr><tr><td class="codekolom">3636</td><td class="codekolom">3687</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">3637</td><td class="codekolom">3688</td><td class="bredecode"> * _.intersection([1, 2, 3], [101, 2, 1, 10], [2, 1]);</td></tr><tr><td class="codekolom">3638</td><td class="codekolom">3689</td><td class="bredecode"> * // =&gt; [1, 2]</td></tr><tr><td class="codekolom">3639</td><td class="codekolom">3690</td><td class="bredecode"> */</td></tr><tr class="del"><td class="codekolom">3640</td><td class="codekolom"></td><td class="bredecode">- function intersection(array) {</td></tr><tr class="add"><td class="codekolom"></td><td class="codekolom">3691</td><td class="bredecode">+ var intersection = function intersection(array, others) {</td></tr><tr><td class="codekolom">3641</td><td class="codekolom">3692</td><td class="bredecode"> var args = arguments,</td></tr><tr><td class="codekolom">3642</td><td class="codekolom">3693</td><td class="bredecode"> argsLength = args.length,</td></tr><tr><td class="codekolom">3643</td><td class="codekolom">3694</td><td class="bredecode"> argsIndex = -1,</td></tr><tr><td class="codekolom">3644</td><td class="codekolom">3695</td><td class="bredecode"> caches = getArray(),</td></tr><tr><td class="codekolom">3645</td><td class="codekolom">3696</td><td class="bredecode"> index = -1,</td></tr><tr><td class="codekolom">3646</td><td class="codekolom">3697</td><td class="bredecode"> indexOf = getIndexOf(),</td></tr><tr><td class="codekolom">3647</td><td class="codekolom">3698</td><td class="bredecode"> length = array ? array.length : 0,</td></tr><tr><td class="codekolom">3648</td><td class="codekolom">3699</td><td class="bredecode"> result = [],</td></tr><tr><td class="codekolom">3649</td><td class="codekolom">3700</td><td class="bredecode"> seen = getArray();</td></tr><tr><td class="codekolom">3650</td><td class="codekolom">3701</td><td class="bredecode"> </td></tr><tr><td class="codekolom">3651</td><td class="codekolom">3702</td><td class="bredecode"> while (++argsIndex &lt; argsLength) {</td></tr><tr><td class="codekolom">3652</td><td class="codekolom">3703</td><td class="bredecode"> var value = args[argsIndex];</td></tr><tr><td class="codekolom">3653</td><td class="codekolom">3704</td><td class="bredecode"> caches[argsIndex] = indexOf === basicIndexOf &amp;&amp;</td></tr><tr><td class="codekolom">3654</td><td class="codekolom">3705</td><td class="bredecode"> (value ? value.length : 0) &gt;= largeArraySize &amp;&amp;</td></tr><tr><td class="codekolom">3655</td><td class="codekolom">3706</td><td class="bredecode"> createCache(argsIndex ? args[argsIndex] : seen);</td></tr><tr><td class="codekolom">3656</td><td class="codekolom">3707</td><td class="bredecode"> }</td></tr><tr><td class="codekolom">3657</td><td class="codekolom">3708</td><td class="bredecode"> outer:</td></tr><tr><td class="codekolom">3658</td><td class="codekolom">3709</td><td class="bredecode"> while (++index &lt; length) {</td></tr><tr><td class="codekolom">3659</td><td class="codekolom">3710</td><td class="bredecode"> var cache = caches[0];</td></tr><tr><td class="codekolom">3660</td><td class="codekolom">3711</td><td class="bredecode"> value = array[index];</td></tr><tr><td class="codekolom">3661</td><td class="codekolom">3712</td><td class="bredecode"> </td></tr><tr><td class="codekolom">3662</td><td class="codekolom">3713</td><td class="bredecode"> if ((cache ? cacheIndexOf(cache, value) : indexOf(seen, value)) &lt; 0) {</td></tr><tr><td class="codekolom">3663</td><td class="codekolom">3714</td><td class="bredecode"> argsIndex = argsLength;</td></tr><tr><td class="codekolom">3664</td><td class="codekolom">3715</td><td class="bredecode"> (cache || seen).push(value);</td></tr><tr><td class="codekolom">3665</td><td class="codekolom">3716</td><td class="bredecode"> while (--argsIndex) {</td></tr><tr><td class="codekolom">3666</td><td class="codekolom">3717</td><td class="bredecode"> cache = caches[argsIndex];</td></tr><tr><td class="codekolom">3667</td><td class="codekolom">3718</td><td class="bredecode"> if ((cache ? cacheIndexOf(cache, value) : indexOf(args[argsIndex], value)) &lt; 0) {</td></tr><tr><td class="codekolom">3668</td><td class="codekolom">3719</td><td class="bredecode"> continue outer;</td></tr><tr><td class="codekolom">3669</td><td class="codekolom">3720</td><td class="bredecode"> }</td></tr><tr><td class="codekolom">3670</td><td class="codekolom">3721</td><td class="bredecode"> }</td></tr><tr><td class="codekolom">3671</td><td class="codekolom">3722</td><td class="bredecode"> result.push(value);</td></tr><tr><td class="codekolom">3672</td><td class="codekolom">3723</td><td class="bredecode"> }</td></tr><tr><td class="codekolom">3673</td><td class="codekolom">3724</td><td class="bredecode"> }</td></tr><tr><td class="codekolom">3674</td><td class="codekolom">3725</td><td class="bredecode"> while (argsLength--) {</td></tr><tr><td class="codekolom">3675</td><td class="codekolom">3726</td><td class="bredecode"> cache = caches[argsLength];</td></tr><tr><td class="codekolom">3676</td><td class="codekolom">3727</td><td class="bredecode"> if (cache) {</td></tr><tr><td class="codekolom">3677</td><td class="codekolom">3728</td><td class="bredecode"> releaseObject(cache);</td></tr><tr><td class="codekolom">3678</td><td class="codekolom">3729</td><td class="bredecode"> }</td></tr><tr><td class="codekolom">3679</td><td class="codekolom">3730</td><td class="bredecode"> }</td></tr><tr><td class="codekolom">3680</td><td class="codekolom">3731</td><td class="bredecode"> releaseArray(caches);</td></tr><tr><td class="codekolom">3681</td><td class="codekolom">3732</td><td class="bredecode"> releaseArray(seen);</td></tr><tr><td class="codekolom">3682</td><td class="codekolom">3733</td><td class="bredecode"> return result;</td></tr><tr class="del"><td class="codekolom">3683</td><td class="codekolom"></td><td class="bredecode">- }</td></tr><tr class="add"><td class="codekolom"></td><td class="codekolom">3734</td><td class="bredecode">+ }.autoCurry();</td></tr><tr><td class="codekolom">3684</td><td class="codekolom">3735</td><td class="bredecode"> </td></tr><tr><td class="codekolom">3685</td><td class="codekolom">3736</td><td class="bredecode"> /**</td></tr><tr><td class="codekolom">3686</td><td class="codekolom">3737</td><td class="bredecode"> * Gets the last element of the `array`. If a number `n` is passed, the</td></tr><tr><td class="codekolom">3687</td><td class="codekolom">3738</td><td class="bredecode"> * last `n` elements of the `array` are returned. If a `callback` function</td></tr><tr><td class="codekolom">3688</td><td class="codekolom">3739</td><td class="bredecode"> * is passed, elements at the end of the array are returned as long as the</td></tr><tr><td class="codekolom">3689</td><td class="codekolom">3740</td><td class="bredecode"> * `callback` returns truthy. The `callback` is bound to `thisArg` and</td></tr><tr><td class="codekolom">3690</td><td class="codekolom">3741</td><td class="bredecode"> * invoked with three arguments;(value, index, array).</td></tr><tr><td class="codekolom">3691</td><td class="codekolom">3742</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">3692</td><td class="codekolom">3743</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">3693</td><td class="codekolom">3744</td><td class="bredecode"> * If a property name is passed for `callback`, the created "_.pluck" style</td></tr><tr><td class="codekolom">3694</td><td class="codekolom">3745</td><td class="bredecode"> * callback will return the property value of the given element.</td></tr><tr><td class="codekolom">3695</td><td class="codekolom">3746</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">3696</td><td class="codekolom">3747</td><td class="bredecode"> * If an object is passed for `callback`, the created "_.where" style callback</td></tr><tr><td class="codekolom">3697</td><td class="codekolom">3748</td><td class="bredecode"> * will return `true` for elements that have the properties of the given object,</td></tr><tr><td class="codekolom">3698</td><td class="codekolom">3749</td><td class="bredecode"> * else `false`.</td></tr><tr><td class="codekolom">3699</td><td class="codekolom">3750</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">3700</td><td class="codekolom">3751</td><td class="bredecode"> * @static</td></tr><tr><td class="codekolom">3701</td><td class="codekolom">3752</td><td class="bredecode"> * @memberOf _</td></tr><tr><td class="codekolom">3702</td><td class="codekolom">3753</td><td class="bredecode"> * @category Arrays</td></tr><tr><td class="codekolom">3703</td><td class="codekolom">3754</td><td class="bredecode"> * @param {Array} array The array to query.</td></tr><tr><td class="codekolom">3704</td><td class="codekolom">3755</td><td class="bredecode"> * @param {Function|Object|Number|String} [callback|n] The function called</td></tr><tr><td class="codekolom">3705</td><td class="codekolom">3756</td><td class="bredecode"> * per element or the number of elements to return. If a property name or</td></tr><tr><td class="codekolom">3706</td><td class="codekolom">3757</td><td class="bredecode"> * object is passed, it will be used to create a "_.pluck" or "_.where"</td></tr><tr><td class="codekolom">3707</td><td class="codekolom">3758</td><td class="bredecode"> * style callback, respectively.</td></tr><tr><td class="codekolom">3708</td><td class="codekolom">3759</td><td class="bredecode"> * @param {Mixed} [thisArg] The `this` binding of `callback`.</td></tr><tr><td class="codekolom">3709</td><td class="codekolom">3760</td><td class="bredecode"> * @returns {Mixed} Returns the last element(s) of `array`.</td></tr><tr><td class="codekolom">3710</td><td class="codekolom">3761</td><td class="bredecode"> * @example</td></tr><tr><td class="codekolom">3711</td><td class="codekolom">3762</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">3712</td><td class="codekolom">3763</td><td class="bredecode"> * _.last([1, 2, 3]);</td></tr><tr><td class="codekolom">3713</td><td class="codekolom">3764</td><td class="bredecode"> * // =&gt; 3</td></tr><tr><td class="codekolom">3714</td><td class="codekolom">3765</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">3715</td><td class="codekolom">3766</td><td class="bredecode"> * _.last([1, 2, 3], 2);</td></tr><tr><td class="codekolom">3716</td><td class="codekolom">3767</td><td class="bredecode"> * // =&gt; [2, 3]</td></tr><tr><td class="codekolom">3717</td><td class="codekolom">3768</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">3718</td><td class="codekolom">3769</td><td class="bredecode"> * _.last([1, 2, 3], function(num) {</td></tr><tr><td class="codekolom">3719</td><td class="codekolom">3770</td><td class="bredecode"> * return num &gt; 1;</td></tr><tr><td class="codekolom">3720</td><td class="codekolom">3771</td><td class="bredecode"> * });</td></tr><tr><td class="codekolom">3721</td><td class="codekolom">3772</td><td class="bredecode"> * // =&gt; [2, 3]</td></tr><tr><td class="codekolom">3722</td><td class="codekolom">3773</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">3723</td><td class="codekolom">3774</td><td class="bredecode"> * var food = [</td></tr><tr><td class="codekolom">3724</td><td class="codekolom">3775</td><td class="bredecode"> * { 'name': 'beet', 'organic': false },</td></tr><tr><td class="codekolom">3725</td><td class="codekolom">3776</td><td class="bredecode"> * { 'name': 'carrot', 'organic': true }</td></tr><tr><td class="codekolom">3726</td><td class="codekolom">3777</td><td class="bredecode"> * ];</td></tr><tr><td class="codekolom">3727</td><td class="codekolom">3778</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">3728</td><td class="codekolom">3779</td><td class="bredecode"> * // using "_.pluck" callback shorthand</td></tr><tr><td class="codekolom">3729</td><td class="codekolom">3780</td><td class="bredecode"> * _.last(food, 'organic');</td></tr><tr><td class="codekolom">3730</td><td class="codekolom">3781</td><td class="bredecode"> * // =&gt; [{ 'name': 'carrot', 'organic': true }]</td></tr><tr><td class="codekolom">3731</td><td class="codekolom">3782</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">3732</td><td class="codekolom">3783</td><td class="bredecode"> * var food = [</td></tr><tr><td class="codekolom">3733</td><td class="codekolom">3784</td><td class="bredecode"> * { 'name': 'banana', 'type': 'fruit' },</td></tr><tr><td class="codekolom">3734</td><td class="codekolom">3785</td><td class="bredecode"> * { 'name': 'beet', 'type': 'vegetable' },</td></tr><tr><td class="codekolom">3735</td><td class="codekolom">3786</td><td class="bredecode"> * { 'name': 'carrot', 'type': 'vegetable' }</td></tr><tr><td class="codekolom">3736</td><td class="codekolom">3787</td><td class="bredecode"> * ];</td></tr><tr><td class="codekolom">3737</td><td class="codekolom">3788</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">3738</td><td class="codekolom">3789</td><td class="bredecode"> * // using "_.where" callback shorthand</td></tr><tr><td class="codekolom">3739</td><td class="codekolom">3790</td><td class="bredecode"> * _.last(food, { 'type': 'vegetable' });</td></tr><tr><td class="codekolom">3740</td><td class="codekolom">3791</td><td class="bredecode"> * // =&gt; [{ 'name': 'beet', 'type': 'vegetable' }, { 'name': 'carrot', 'type': 'vegetable' }]</td></tr><tr><td class="codekolom">3741</td><td class="codekolom">3792</td><td class="bredecode"> */</td></tr><tr class="del"><td class="codekolom">3742</td><td class="codekolom"></td><td class="bredecode">- function last(array, callback, thisArg) {</td></tr><tr class="add"><td class="codekolom"></td><td class="codekolom">3793</td><td class="bredecode">+ var last = function last(array, callback, thisArg) {</td></tr><tr><td class="codekolom">3743</td><td class="codekolom">3794</td><td class="bredecode"> if (array) {</td></tr><tr><td class="codekolom">3744</td><td class="codekolom">3795</td><td class="bredecode"> var n = 0,</td></tr><tr><td class="codekolom">3745</td><td class="codekolom">3796</td><td class="bredecode"> length = array.length;</td></tr><tr><td class="codekolom">3746</td><td class="codekolom">3797</td><td class="bredecode"> </td></tr><tr><td class="codekolom">3747</td><td class="codekolom">3798</td><td class="bredecode"> if (typeof callback != 'number' &amp;&amp; callback != null) {</td></tr><tr><td class="codekolom">3748</td><td class="codekolom">3799</td><td class="bredecode"> var index = length;</td></tr><tr><td class="codekolom">3749</td><td class="codekolom">3800</td><td class="bredecode"> callback = lodash.createCallback(callback, thisArg);</td></tr><tr><td class="codekolom">3750</td><td class="codekolom">3801</td><td class="bredecode"> while (index-- &amp;&amp; callback(array[index], index, array)) {</td></tr><tr><td class="codekolom">3751</td><td class="codekolom">3802</td><td class="bredecode"> n++;</td></tr><tr><td class="codekolom">3752</td><td class="codekolom">3803</td><td class="bredecode"> }</td></tr><tr><td class="codekolom">3753</td><td class="codekolom">3804</td><td class="bredecode"> } else {</td></tr><tr><td class="codekolom">3754</td><td class="codekolom">3805</td><td class="bredecode"> n = callback;</td></tr><tr><td class="codekolom">3755</td><td class="codekolom">3806</td><td class="bredecode"> if (n == null || thisArg) {</td></tr><tr><td class="codekolom">3756</td><td class="codekolom">3807</td><td class="bredecode"> return array[length - 1];</td></tr><tr><td class="codekolom">3757</td><td class="codekolom">3808</td><td class="bredecode"> }</td></tr><tr><td class="codekolom">3758</td><td class="codekolom">3809</td><td class="bredecode"> }</td></tr><tr><td class="codekolom">3759</td><td class="codekolom">3810</td><td class="bredecode"> return slice(array, nativeMax(0, length - n));</td></tr><tr><td class="codekolom">3760</td><td class="codekolom">3811</td><td class="bredecode"> }</td></tr><tr><td class="codekolom">3761</td><td class="codekolom">3812</td><td class="bredecode"> }</td></tr><tr><td class="codekolom">3762</td><td class="codekolom">3813</td><td class="bredecode"> </td></tr><tr><td class="codekolom">3763</td><td class="codekolom">3814</td><td class="bredecode"> /**</td></tr><tr><td class="codekolom">3764</td><td class="codekolom">3815</td><td class="bredecode"> * Gets the index at which the last occurrence of `value` is found using strict</td></tr><tr><td class="codekolom">3765</td><td class="codekolom">3816</td><td class="bredecode"> * equality for comparisons, i.e. `===`. If `fromIndex` is negative, it is used</td></tr><tr><td class="codekolom">3766</td><td class="codekolom">3817</td><td class="bredecode"> * as the offset from the end of the collection.</td></tr><tr><td class="codekolom">3767</td><td class="codekolom">3818</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">3768</td><td class="codekolom">3819</td><td class="bredecode"> * @static</td></tr><tr><td class="codekolom">3769</td><td class="codekolom">3820</td><td class="bredecode"> * @memberOf _</td></tr><tr><td class="codekolom">3770</td><td class="codekolom">3821</td><td class="bredecode"> * @category Arrays</td></tr><tr><td class="codekolom">3771</td><td class="codekolom">3822</td><td class="bredecode"> * @param {Array} array The array to search.</td></tr><tr><td class="codekolom">3772</td><td class="codekolom">3823</td><td class="bredecode"> * @param {Mixed} value The value to search for.</td></tr><tr><td class="codekolom">3773</td><td class="codekolom">3824</td><td class="bredecode"> * @param {Number} [fromIndex=array.length-1] The index to search from.</td></tr><tr><td class="codekolom">3774</td><td class="codekolom">3825</td><td class="bredecode"> * @returns {Number} Returns the index of the matched value or `-1`.</td></tr><tr><td class="codekolom">3775</td><td class="codekolom">3826</td><td class="bredecode"> * @example</td></tr><tr><td class="codekolom">3776</td><td class="codekolom">3827</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">3777</td><td class="codekolom">3828</td><td class="bredecode"> * _.lastIndexOf([1, 2, 3, 1, 2, 3], 2);</td></tr><tr><td class="codekolom">3778</td><td class="codekolom">3829</td><td class="bredecode"> * // =&gt; 4</td></tr><tr><td class="codekolom">3779</td><td class="codekolom">3830</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">3780</td><td class="codekolom">3831</td><td class="bredecode"> * _.lastIndexOf([1, 2, 3, 1, 2, 3], 2, 3);</td></tr><tr><td class="codekolom">3781</td><td class="codekolom">3832</td><td class="bredecode"> * // =&gt; 1</td></tr><tr><td class="codekolom">3782</td><td class="codekolom">3833</td><td class="bredecode"> */</td></tr><tr class="del"><td class="codekolom">3783</td><td class="codekolom"></td><td class="bredecode">- function lastIndexOf(array, value, fromIndex) {</td></tr><tr class="add"><td class="codekolom"></td><td class="codekolom">3834</td><td class="bredecode">+ var lastIndexOf = function lastIndexOf(value, array, fromIndex) {</td></tr><tr><td class="codekolom">3784</td><td class="codekolom">3835</td><td class="bredecode"> var index = array ? array.length : 0;</td></tr><tr><td class="codekolom">3785</td><td class="codekolom">3836</td><td class="bredecode"> if (typeof fromIndex == 'number') {</td></tr><tr><td class="codekolom">3786</td><td class="codekolom">3837</td><td class="bredecode"> index = (fromIndex &lt; 0 ? nativeMax(0, index + fromIndex) : nativeMin(fromIndex, index - 1)) + 1;</td></tr><tr><td class="codekolom">3787</td><td class="codekolom">3838</td><td class="bredecode"> }</td></tr><tr><td class="codekolom">3788</td><td class="codekolom">3839</td><td class="bredecode"> while (index--) {</td></tr><tr><td class="codekolom">3789</td><td class="codekolom">3840</td><td class="bredecode"> if (array[index] === value) {</td></tr><tr><td class="codekolom">3790</td><td class="codekolom">3841</td><td class="bredecode"> return index;</td></tr><tr><td class="codekolom">3791</td><td class="codekolom">3842</td><td class="bredecode"> }</td></tr><tr><td class="codekolom">3792</td><td class="codekolom">3843</td><td class="bredecode"> }</td></tr><tr><td class="codekolom">3793</td><td class="codekolom">3844</td><td class="bredecode"> return -1;</td></tr><tr class="del"><td class="codekolom">3794</td><td class="codekolom"></td><td class="bredecode">- }</td></tr><tr class="add"><td class="codekolom"></td><td class="codekolom">3845</td><td class="bredecode">+ }.autoCurry(2);</td></tr><tr><td class="codekolom">3795</td><td class="codekolom">3846</td><td class="bredecode"> </td></tr><tr><td class="codekolom">3796</td><td class="codekolom">3847</td><td class="bredecode"> /**</td></tr><tr><td class="codekolom">3797</td><td class="codekolom">3848</td><td class="bredecode"> * Creates an array of numbers (positive and/or negative) progressing from</td></tr><tr><td class="codekolom">3798</td><td class="codekolom">3849</td><td class="bredecode"> * `start` up to but not including `end`.</td></tr><tr><td class="codekolom">3799</td><td class="codekolom">3850</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">3800</td><td class="codekolom">3851</td><td class="bredecode"> * @static</td></tr><tr><td class="codekolom">3801</td><td class="codekolom">3852</td><td class="bredecode"> * @memberOf _</td></tr><tr><td class="codekolom">3802</td><td class="codekolom">3853</td><td class="bredecode"> * @category Arrays</td></tr><tr><td class="codekolom">3803</td><td class="codekolom">3854</td><td class="bredecode"> * @param {Number} [start=0] The start of the range.</td></tr><tr><td class="codekolom">3804</td><td class="codekolom">3855</td><td class="bredecode"> * @param {Number} end The end of the range.</td></tr><tr><td class="codekolom">3805</td><td class="codekolom">3856</td><td class="bredecode"> * @param {Number} [step=1] The value to increment or decrement by.</td></tr><tr><td class="codekolom">3806</td><td class="codekolom">3857</td><td class="bredecode"> * @returns {Array} Returns a new range array.</td></tr><tr><td class="codekolom">3807</td><td class="codekolom">3858</td><td class="bredecode"> * @example</td></tr><tr><td class="codekolom">3808</td><td class="codekolom">3859</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">3809</td><td class="codekolom">3860</td><td class="bredecode"> * _.range(10);</td></tr><tr><td class="codekolom">3810</td><td class="codekolom">3861</td><td class="bredecode"> * // =&gt; [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]</td></tr><tr><td class="codekolom">3811</td><td class="codekolom">3862</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">3812</td><td class="codekolom">3863</td><td class="bredecode"> * _.range(1, 11);</td></tr><tr><td class="codekolom">3813</td><td class="codekolom">3864</td><td class="bredecode"> * // =&gt; [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]</td></tr><tr><td class="codekolom">3814</td><td class="codekolom">3865</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">3815</td><td class="codekolom">3866</td><td class="bredecode"> * _.range(0, 30, 5);</td></tr><tr><td class="codekolom">3816</td><td class="codekolom">3867</td><td class="bredecode"> * // =&gt; [0, 5, 10, 15, 20, 25]</td></tr><tr><td class="codekolom">3817</td><td class="codekolom">3868</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">3818</td><td class="codekolom">3869</td><td class="bredecode"> * _.range(0, -10, -1);</td></tr><tr><td class="codekolom">3819</td><td class="codekolom">3870</td><td class="bredecode"> * // =&gt; [0, -1, -2, -3, -4, -5, -6, -7, -8, -9]</td></tr><tr><td class="codekolom">3820</td><td class="codekolom">3871</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">3821</td><td class="codekolom">3872</td><td class="bredecode"> * _.range(0);</td></tr><tr><td class="codekolom">3822</td><td class="codekolom">3873</td><td class="bredecode"> * // =&gt; []</td></tr><tr><td class="codekolom">3823</td><td class="codekolom">3874</td><td class="bredecode"> */</td></tr><tr><td class="codekolom">3824</td><td class="codekolom">3875</td><td class="bredecode"> function range(start, end, step) {</td></tr><tr><td class="codekolom">3825</td><td class="codekolom">3876</td><td class="bredecode"> start = +start || 0;</td></tr><tr><td class="codekolom">3826</td><td class="codekolom">3877</td><td class="bredecode"> step = +step || 1;</td></tr><tr><td class="codekolom">3827</td><td class="codekolom">3878</td><td class="bredecode"> </td></tr><tr><td class="codekolom">3828</td><td class="codekolom">3879</td><td class="bredecode"> if (end == null) {</td></tr><tr><td class="codekolom">3829</td><td class="codekolom">3880</td><td class="bredecode"> end = start;</td></tr><tr><td class="codekolom">3830</td><td class="codekolom">3881</td><td class="bredecode"> start = 0;</td></tr><tr><td class="codekolom">3831</td><td class="codekolom">3882</td><td class="bredecode"> }</td></tr><tr><td class="codekolom">3832</td><td class="codekolom">3883</td><td class="bredecode"> // use `Array(length)` so V8 will avoid the slower "dictionary" mode</td></tr><tr><td class="codekolom">3833</td><td class="codekolom">3884</td><td class="bredecode"> // http://youtu.be/XAqIpGU8ZZk#t=17m25s</td></tr><tr><td class="codekolom">3834</td><td class="codekolom">3885</td><td class="bredecode"> var index = -1,</td></tr><tr><td class="codekolom">3835</td><td class="codekolom">3886</td><td class="bredecode"> length = nativeMax(0, ceil((end - start) / step)),</td></tr><tr><td class="codekolom">3836</td><td class="codekolom">3887</td><td class="bredecode"> result = Array(length);</td></tr><tr><td class="codekolom">3837</td><td class="codekolom">3888</td><td class="bredecode"> </td></tr><tr><td class="codekolom">3838</td><td class="codekolom">3889</td><td class="bredecode"> while (++index &lt; length) {</td></tr><tr><td class="codekolom">3839</td><td class="codekolom">3890</td><td class="bredecode"> result[index] = start;</td></tr><tr><td class="codekolom">3840</td><td class="codekolom">3891</td><td class="bredecode"> start += step;</td></tr><tr><td class="codekolom">3841</td><td class="codekolom">3892</td><td class="bredecode"> }</td></tr><tr><td class="codekolom">3842</td><td class="codekolom">3893</td><td class="bredecode"> return result;</td></tr><tr><td class="codekolom">3843</td><td class="codekolom">3894</td><td class="bredecode"> }</td></tr><tr><td class="codekolom">3844</td><td class="codekolom">3895</td><td class="bredecode"> </td></tr><tr><td class="codekolom">3845</td><td class="codekolom">3896</td><td class="bredecode"> /**</td></tr><tr><td class="codekolom">3846</td><td class="codekolom">3897</td><td class="bredecode"> * The opposite of `_.initial`, this method gets all but the first value of</td></tr><tr><td class="codekolom">3847</td><td class="codekolom">3898</td><td class="bredecode"> * `array`. If a number `n` is passed, the first `n` values are excluded from</td></tr><tr><td class="codekolom">3848</td><td class="codekolom">3899</td><td class="bredecode"> * the result. If a `callback` function is passed, elements at the beginning</td></tr><tr><td class="codekolom">3849</td><td class="codekolom">3900</td><td class="bredecode"> * of the array are excluded from the result as long as the `callback` returns</td></tr><tr><td class="codekolom">3850</td><td class="codekolom">3901</td><td class="bredecode"> * truthy. The `callback` is bound to `thisArg` and invoked with three</td></tr><tr><td class="codekolom">3851</td><td class="codekolom">3902</td><td class="bredecode"> * arguments; (value, index, array).</td></tr><tr><td class="codekolom">3852</td><td class="codekolom">3903</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">3853</td><td class="codekolom">3904</td><td class="bredecode"> * If a property name is passed for `callback`, the created "_.pluck" style</td></tr><tr><td class="codekolom">3854</td><td class="codekolom">3905</td><td class="bredecode"> * callback will return the property value of the given element.</td></tr><tr><td class="codekolom">3855</td><td class="codekolom">3906</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">3856</td><td class="codekolom">3907</td><td class="bredecode"> * If an object is passed for `callback`, the created "_.where" style callback</td></tr><tr><td class="codekolom">3857</td><td class="codekolom">3908</td><td class="bredecode"> * will return `true` for elements that have the properties of the given object,</td></tr><tr><td class="codekolom">3858</td><td class="codekolom">3909</td><td class="bredecode"> * else `false`.</td></tr><tr><td class="codekolom">3859</td><td class="codekolom">3910</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">3860</td><td class="codekolom">3911</td><td class="bredecode"> * @static</td></tr><tr><td class="codekolom">3861</td><td class="codekolom">3912</td><td class="bredecode"> * @memberOf _</td></tr><tr><td class="codekolom">3862</td><td class="codekolom">3913</td><td class="bredecode"> * @alias drop, tail</td></tr><tr><td class="codekolom">3863</td><td class="codekolom">3914</td><td class="bredecode"> * @category Arrays</td></tr><tr><td class="codekolom">3864</td><td class="codekolom">3915</td><td class="bredecode"> * @param {Array} array The array to query.</td></tr><tr><td class="codekolom">3865</td><td class="codekolom">3916</td><td class="bredecode"> * @param {Function|Object|Number|String} [callback|n=1] The function called</td></tr><tr><td class="codekolom">3866</td><td class="codekolom">3917</td><td class="bredecode"> * per element or the number of elements to exclude. If a property name or</td></tr><tr><td class="codekolom">3867</td><td class="codekolom">3918</td><td class="bredecode"> * object is passed, it will be used to create a "_.pluck" or "_.where"</td></tr><tr><td class="codekolom">3868</td><td class="codekolom">3919</td><td class="bredecode"> * style callback, respectively.</td></tr><tr><td class="codekolom">3869</td><td class="codekolom">3920</td><td class="bredecode"> * @param {Mixed} [thisArg] The `this` binding of `callback`.</td></tr><tr><td class="codekolom">3870</td><td class="codekolom">3921</td><td class="bredecode"> * @returns {Array} Returns a slice of `array`.</td></tr><tr><td class="codekolom">3871</td><td class="codekolom">3922</td><td class="bredecode"> * @example</td></tr><tr><td class="codekolom">3872</td><td class="codekolom">3923</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">3873</td><td class="codekolom">3924</td><td class="bredecode"> * _.rest([1, 2, 3]);</td></tr><tr><td class="codekolom">3874</td><td class="codekolom">3925</td><td class="bredecode"> * // =&gt; [2, 3]</td></tr><tr><td class="codekolom">3875</td><td class="codekolom">3926</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">3876</td><td class="codekolom">3927</td><td class="bredecode"> * _.rest([1, 2, 3], 2);</td></tr><tr><td class="codekolom">3877</td><td class="codekolom">3928</td><td class="bredecode"> * // =&gt; [3]</td></tr><tr><td class="codekolom">3878</td><td class="codekolom">3929</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">3879</td><td class="codekolom">3930</td><td class="bredecode"> * _.rest([1, 2, 3], function(num) {</td></tr><tr><td class="codekolom">3880</td><td class="codekolom">3931</td><td class="bredecode"> * return num &lt; 3;</td></tr><tr><td class="codekolom">3881</td><td class="codekolom">3932</td><td class="bredecode"> * });</td></tr><tr><td class="codekolom">3882</td><td class="codekolom">3933</td><td class="bredecode"> * // =&gt; [3]</td></tr><tr><td class="codekolom">3883</td><td class="codekolom">3934</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">3884</td><td class="codekolom">3935</td><td class="bredecode"> * var food = [</td></tr><tr><td class="codekolom">3885</td><td class="codekolom">3936</td><td class="bredecode"> * { 'name': 'banana', 'organic': true },</td></tr><tr><td class="codekolom">3886</td><td class="codekolom">3937</td><td class="bredecode"> * { 'name': 'beet', 'organic': false },</td></tr><tr><td class="codekolom">3887</td><td class="codekolom">3938</td><td class="bredecode"> * ];</td></tr><tr><td class="codekolom">3888</td><td class="codekolom">3939</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">3889</td><td class="codekolom">3940</td><td class="bredecode"> * // using "_.pluck" callback shorthand</td></tr><tr><td class="codekolom">3890</td><td class="codekolom">3941</td><td class="bredecode"> * _.rest(food, 'organic');</td></tr><tr><td class="codekolom">3891</td><td class="codekolom">3942</td><td class="bredecode"> * // =&gt; [{ 'name': 'beet', 'organic': false }]</td></tr><tr><td class="codekolom">3892</td><td class="codekolom">3943</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">3893</td><td class="codekolom">3944</td><td class="bredecode"> * var food = [</td></tr><tr><td class="codekolom">3894</td><td class="codekolom">3945</td><td class="bredecode"> * { 'name': 'apple', 'type': 'fruit' },</td></tr><tr><td class="codekolom">3895</td><td class="codekolom">3946</td><td class="bredecode"> * { 'name': 'banana', 'type': 'fruit' },</td></tr><tr><td class="codekolom">3896</td><td class="codekolom">3947</td><td class="bredecode"> * { 'name': 'beet', 'type': 'vegetable' }</td></tr><tr><td class="codekolom">3897</td><td class="codekolom">3948</td><td class="bredecode"> * ];</td></tr><tr><td class="codekolom">3898</td><td class="codekolom">3949</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">3899</td><td class="codekolom">3950</td><td class="bredecode"> * // using "_.where" callback shorthand</td></tr><tr><td class="codekolom">3900</td><td class="codekolom">3951</td><td class="bredecode"> * _.rest(food, { 'type': 'fruit' });</td></tr><tr><td class="codekolom">3901</td><td class="codekolom">3952</td><td class="bredecode"> * // =&gt; [{ 'name': 'beet', 'type': 'vegetable' }]</td></tr><tr><td class="codekolom">3902</td><td class="codekolom">3953</td><td class="bredecode"> */</td></tr><tr class="del"><td class="codekolom">3903</td><td class="codekolom"></td><td class="bredecode">- function rest(array, callback, thisArg) {</td></tr><tr class="del"><td class="codekolom">3904</td><td class="codekolom"></td><td class="bredecode">- if (typeof callback != 'number' &amp;&amp; callback != null) {</td></tr><tr class="del"><td class="codekolom">3905</td><td class="codekolom"></td><td class="bredecode">- var n = 0,</td></tr><tr class="del"><td class="codekolom">3906</td><td class="codekolom"></td><td class="bredecode">- index = -1,</td></tr><tr class="del"><td class="codekolom">3907</td><td class="codekolom"></td><td class="bredecode">- length = array ? array.length : 0;</td></tr><tr><td class="codekolom">3908</td><td class="codekolom">3954</td><td class="bredecode"> </td></tr><tr class="del"><td class="codekolom">3909</td><td class="codekolom"></td><td class="bredecode">- callback = lodash.createCallback(callback, thisArg);</td></tr><tr class="del"><td class="codekolom">3910</td><td class="codekolom"></td><td class="bredecode">- while (++index &lt; length &amp;&amp; callback(array[index], index, array)) {</td></tr><tr class="del"><td class="codekolom">3911</td><td class="codekolom"></td><td class="bredecode">- n++;</td></tr><tr class="del"><td class="codekolom">3912</td><td class="codekolom"></td><td class="bredecode">- }</td></tr><tr class="del"><td class="codekolom">3913</td><td class="codekolom"></td><td class="bredecode">- } else {</td></tr><tr class="del"><td class="codekolom">3914</td><td class="codekolom"></td><td class="bredecode">- n = (callback == null || thisArg) ? 1 : nativeMax(0, callback);</td></tr><tr class="del"><td class="codekolom">3915</td><td class="codekolom"></td><td class="bredecode">- }</td></tr><tr class="del"><td class="codekolom">3916</td><td class="codekolom"></td><td class="bredecode">- return slice(array, n);</td></tr><tr class="del"><td class="codekolom">3917</td><td class="codekolom"></td><td class="bredecode">- }</td></tr><tr class="add"><td class="codekolom"></td><td class="codekolom">3955</td><td class="bredecode">+ var rest = function(array) {</td></tr><tr class="add"><td class="codekolom"></td><td class="codekolom">3956</td><td class="bredecode">+ return slice(array, 1);</td></tr><tr class="add"><td class="codekolom"></td><td class="codekolom">3957</td><td class="bredecode">+ }</td></tr><tr class="add"><td class="codekolom"></td><td class="codekolom">3958</td><td class="bredecode">+ </td></tr><tr class="add"><td class="codekolom"></td><td class="codekolom">3959</td><td class="bredecode">+ var restBy = function(guard, array) {</td></tr><tr class="add"><td class="codekolom"></td><td class="codekolom">3960</td><td class="bredecode">+ return slice(array, guard);</td></tr><tr class="add"><td class="codekolom"></td><td class="codekolom">3961</td><td class="bredecode">+ }.autoCurry();</td></tr><tr class="add"><td class="codekolom"></td><td class="codekolom">3962</td><td class="bredecode">+ </td></tr><tr class="add"><td class="codekolom"></td><td class="codekolom">3963</td><td class="bredecode">+ var drop = function(n, array) {</td></tr><tr class="add"><td class="codekolom"></td><td class="codekolom">3964</td><td class="bredecode">+ return slice(array, nativeMax(0, n));</td></tr><tr class="add"><td class="codekolom"></td><td class="codekolom">3965</td><td class="bredecode">+ }.autoCurry();</td></tr><tr class="add"><td class="codekolom"></td><td class="codekolom">3966</td><td class="bredecode">+ </td></tr><tr class="add"><td class="codekolom"></td><td class="codekolom">3967</td><td class="bredecode">+ // var rest = function rest(array, callback, thisArg) {</td></tr><tr class="add"><td class="codekolom"></td><td class="codekolom">3968</td><td class="bredecode">+ // if (typeof callback != 'number' &amp;&amp; callback != null) {</td></tr><tr class="add"><td class="codekolom"></td><td class="codekolom">3969</td><td class="bredecode">+ // var n = 0,</td></tr><tr class="add"><td class="codekolom"></td><td class="codekolom">3970</td><td class="bredecode">+ // index = -1,</td></tr><tr class="add"><td class="codekolom"></td><td class="codekolom">3971</td><td class="bredecode">+ // length = array ? array.length : 0;</td></tr><tr class="add"><td class="codekolom"></td><td class="codekolom">3972</td><td class="bredecode">+ </td></tr><tr class="add"><td class="codekolom"></td><td class="codekolom">3973</td><td class="bredecode">+ // callback = lodash.createCallback(callback, thisArg);</td></tr><tr class="add"><td class="codekolom"></td><td class="codekolom">3974</td><td class="bredecode">+ // while (++index &lt; length &amp;&amp; callback(array[index], index, array)) {</td></tr><tr class="add"><td class="codekolom"></td><td class="codekolom">3975</td><td class="bredecode">+ // n++;</td></tr><tr class="add"><td class="codekolom"></td><td class="codekolom">3976</td><td class="bredecode">+ // }</td></tr><tr class="add"><td class="codekolom"></td><td class="codekolom">3977</td><td class="bredecode">+ // } else {</td></tr><tr class="add"><td class="codekolom"></td><td class="codekolom">3978</td><td class="bredecode">+ // n = (callback == null || thisArg) ? 1 : nativeMax(0, callback);</td></tr><tr class="add"><td class="codekolom"></td><td class="codekolom">3979</td><td class="bredecode">+ // }</td></tr><tr class="add"><td class="codekolom"></td><td class="codekolom">3980</td><td class="bredecode">+ // return slice(array, n);</td></tr><tr class="add"><td class="codekolom"></td><td class="codekolom">3981</td><td class="bredecode">+ // }</td></tr><tr><td class="codekolom">3918</td><td class="codekolom">3982</td><td class="bredecode"> </td></tr><tr><td class="codekolom">3919</td><td class="codekolom">3983</td><td class="bredecode"> /**</td></tr><tr><td class="codekolom">3920</td><td class="codekolom">3984</td><td class="bredecode"> * Uses a binary search to determine the smallest index at which the `value`</td></tr><tr><td class="codekolom">3921</td><td class="codekolom">3985</td><td class="bredecode"> * should be inserted into `array` in order to maintain the sort order of the</td></tr><tr><td class="codekolom">3922</td><td class="codekolom">3986</td><td class="bredecode"> * sorted `array`. If `callback` is passed, it will be executed for `value` and</td></tr><tr><td class="codekolom">3923</td><td class="codekolom">3987</td><td class="bredecode"> * each element in `array` to compute their sort ranking. The `callback` is</td></tr><tr><td class="codekolom">3924</td><td class="codekolom">3988</td><td class="bredecode"> * bound to `thisArg` and invoked with one argument; (value).</td></tr><tr><td class="codekolom">3925</td><td class="codekolom">3989</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">3926</td><td class="codekolom">3990</td><td class="bredecode"> * If a property name is passed for `callback`, the created "_.pluck" style</td></tr><tr><td class="codekolom">3927</td><td class="codekolom">3991</td><td class="bredecode"> * callback will return the property value of the given element.</td></tr><tr><td class="codekolom">3928</td><td class="codekolom">3992</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">3929</td><td class="codekolom">3993</td><td class="bredecode"> * If an object is passed for `callback`, the created "_.where" style callback</td></tr><tr><td class="codekolom">3930</td><td class="codekolom">3994</td><td class="bredecode"> * will return `true` for elements that have the properties of the given object,</td></tr><tr><td class="codekolom">3931</td><td class="codekolom">3995</td><td class="bredecode"> * else `false`.</td></tr><tr><td class="codekolom">3932</td><td class="codekolom">3996</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">3933</td><td class="codekolom">3997</td><td class="bredecode"> * @static</td></tr><tr><td class="codekolom">3934</td><td class="codekolom">3998</td><td class="bredecode"> * @memberOf _</td></tr><tr><td class="codekolom">3935</td><td class="codekolom">3999</td><td class="bredecode"> * @category Arrays</td></tr><tr><td class="codekolom">3936</td><td class="codekolom">4000</td><td class="bredecode"> * @param {Array} array The array to inspect.</td></tr><tr><td class="codekolom">3937</td><td class="codekolom">4001</td><td class="bredecode"> * @param {Mixed} value The value to evaluate.</td></tr><tr><td class="codekolom">3938</td><td class="codekolom">4002</td><td class="bredecode"> * @param {Function|Object|String} [callback=identity] The function called per</td></tr><tr><td class="codekolom">3939</td><td class="codekolom">4003</td><td class="bredecode"> * iteration. If a property name or object is passed, it will be used to create</td></tr><tr><td class="codekolom">3940</td><td class="codekolom">4004</td><td class="bredecode"> * a "_.pluck" or "_.where" style callback, respectively.</td></tr><tr><td class="codekolom">3941</td><td class="codekolom">4005</td><td class="bredecode"> * @param {Mixed} [thisArg] The `this` binding of `callback`.</td></tr><tr><td class="codekolom">3942</td><td class="codekolom">4006</td><td class="bredecode"> * @returns {Number} Returns the index at which the value should be inserted</td></tr><tr><td class="codekolom">3943</td><td class="codekolom">4007</td><td class="bredecode"> * into `array`.</td></tr><tr><td class="codekolom">3944</td><td class="codekolom">4008</td><td class="bredecode"> * @example</td></tr><tr><td class="codekolom">3945</td><td class="codekolom">4009</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">3946</td><td class="codekolom">4010</td><td class="bredecode"> * _.sortedIndex([20, 30, 50], 40);</td></tr><tr><td class="codekolom">3947</td><td class="codekolom">4011</td><td class="bredecode"> * // =&gt; 2</td></tr><tr><td class="codekolom">3948</td><td class="codekolom">4012</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">3949</td><td class="codekolom">4013</td><td class="bredecode"> * // using "_.pluck" callback shorthand</td></tr><tr><td class="codekolom">3950</td><td class="codekolom">4014</td><td class="bredecode"> * _.sortedIndex([{ 'x': 20 }, { 'x': 30 }, { 'x': 50 }], { 'x': 40 }, 'x');</td></tr><tr><td class="codekolom">3951</td><td class="codekolom">4015</td><td class="bredecode"> * // =&gt; 2</td></tr><tr><td class="codekolom">3952</td><td class="codekolom">4016</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">3953</td><td class="codekolom">4017</td><td class="bredecode"> * var dict = {</td></tr><tr><td class="codekolom">3954</td><td class="codekolom">4018</td><td class="bredecode"> * 'wordToNumber': { 'twenty': 20, 'thirty': 30, 'fourty': 40, 'fifty': 50 }</td></tr><tr><td class="codekolom">3955</td><td class="codekolom">4019</td><td class="bredecode"> * };</td></tr><tr><td class="codekolom">3956</td><td class="codekolom">4020</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">3957</td><td class="codekolom">4021</td><td class="bredecode"> * _.sortedIndex(['twenty', 'thirty', 'fifty'], 'fourty', function(word) {</td></tr><tr><td class="codekolom">3958</td><td class="codekolom">4022</td><td class="bredecode"> * return dict.wordToNumber[word];</td></tr><tr><td class="codekolom">3959</td><td class="codekolom">4023</td><td class="bredecode"> * });</td></tr><tr><td class="codekolom">3960</td><td class="codekolom">4024</td><td class="bredecode"> * // =&gt; 2</td></tr><tr><td class="codekolom">3961</td><td class="codekolom">4025</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">3962</td><td class="codekolom">4026</td><td class="bredecode"> * _.sortedIndex(['twenty', 'thirty', 'fifty'], 'fourty', function(word) {</td></tr><tr><td class="codekolom">3963</td><td class="codekolom">4027</td><td class="bredecode"> * return this.wordToNumber[word];</td></tr><tr><td class="codekolom">3964</td><td class="codekolom">4028</td><td class="bredecode"> * }, dict);</td></tr><tr><td class="codekolom">3965</td><td class="codekolom">4029</td><td class="bredecode"> * // =&gt; 2</td></tr><tr><td class="codekolom">3966</td><td class="codekolom">4030</td><td class="bredecode"> */</td></tr><tr><td class="codekolom">3967</td><td class="codekolom">4031</td><td class="bredecode"> function sortedIndex(array, value, callback, thisArg) {</td></tr><tr><td class="codekolom">3968</td><td class="codekolom">4032</td><td class="bredecode"> var low = 0,</td></tr><tr><td class="codekolom">3969</td><td class="codekolom">4033</td><td class="bredecode"> high = array ? array.length : low;</td></tr><tr><td class="codekolom">3970</td><td class="codekolom">4034</td><td class="bredecode"> </td></tr><tr><td class="codekolom">3971</td><td class="codekolom">4035</td><td class="bredecode"> // explicitly reference `identity` for better inlining in Firefox</td></tr><tr><td class="codekolom">3972</td><td class="codekolom">4036</td><td class="bredecode"> callback = callback ? lodash.createCallback(callback, thisArg, 1) : identity;</td></tr><tr><td class="codekolom">3973</td><td class="codekolom">4037</td><td class="bredecode"> value = callback(value);</td></tr><tr><td class="codekolom">3974</td><td class="codekolom">4038</td><td class="bredecode"> </td></tr><tr><td class="codekolom">3975</td><td class="codekolom">4039</td><td class="bredecode"> while (low &lt; high) {</td></tr><tr><td class="codekolom">3976</td><td class="codekolom">4040</td><td class="bredecode"> var mid = (low + high) &gt;&gt;&gt; 1;</td></tr><tr><td class="codekolom">3977</td><td class="codekolom">4041</td><td class="bredecode"> (callback(array[mid]) &lt; value)</td></tr><tr><td class="codekolom">3978</td><td class="codekolom">4042</td><td class="bredecode"> ? low = mid + 1</td></tr><tr><td class="codekolom">3979</td><td class="codekolom">4043</td><td class="bredecode"> : high = mid;</td></tr><tr><td class="codekolom">3980</td><td class="codekolom">4044</td><td class="bredecode"> }</td></tr><tr><td class="codekolom">3981</td><td class="codekolom">4045</td><td class="bredecode"> return low;</td></tr><tr><td class="codekolom">3982</td><td class="codekolom">4046</td><td class="bredecode"> }</td></tr><tr><td class="codekolom">3983</td><td class="codekolom">4047</td><td class="bredecode"> </td></tr><tr><td class="codekolom">3984</td><td class="codekolom">4048</td><td class="bredecode"> /**</td></tr><tr><td class="codekolom">3985</td><td class="codekolom">4049</td><td class="bredecode"> * Computes the union of the passed-in arrays using strict equality for</td></tr><tr><td class="codekolom">3986</td><td class="codekolom">4050</td><td class="bredecode"> * comparisons, i.e. `===`.</td></tr><tr><td class="codekolom">3987</td><td class="codekolom">4051</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">3988</td><td class="codekolom">4052</td><td class="bredecode"> * @static</td></tr><tr><td class="codekolom">3989</td><td class="codekolom">4053</td><td class="bredecode"> * @memberOf _</td></tr><tr><td class="codekolom">3990</td><td class="codekolom">4054</td><td class="bredecode"> * @category Arrays</td></tr><tr class="del"><td class="codekolom">3991</td><td class="codekolom"></td><td class="bredecode">- * @param {Array} [array1, array2, ...] Arrays to process.</td></tr><tr class="add"><td class="codekolom"></td><td class="codekolom">4055</td><td class="bredecode">+ * @param {Array} {Array} Arrays to process.</td></tr><tr><td class="codekolom">3992</td><td class="codekolom">4056</td><td class="bredecode"> * @returns {Array} Returns a new array of unique values, in order, that are</td></tr><tr class="del"><td class="codekolom">3993</td><td class="codekolom"></td><td class="bredecode">- * present in one or more of the arrays.</td></tr><tr class="add"><td class="codekolom"></td><td class="codekolom">4057</td><td class="bredecode">+ * present in one or both of the arrays.</td></tr><tr><td class="codekolom">3994</td><td class="codekolom">4058</td><td class="bredecode"> * @example</td></tr><tr><td class="codekolom">3995</td><td class="codekolom">4059</td><td class="bredecode"> *</td></tr><tr class="del"><td class="codekolom">3996</td><td class="codekolom"></td><td class="bredecode">- * _.union([1, 2, 3], [101, 2, 1, 10], [2, 1]);</td></tr><tr class="del"><td class="codekolom">3997</td><td class="codekolom"></td><td class="bredecode">- * // =&gt; [1, 2, 3, 101, 10]</td></tr><tr class="add"><td class="codekolom"></td><td class="codekolom">4060</td><td class="bredecode">+ * _.union([1, 2, 3], [101, 2, 1, 10]);</td></tr><tr class="add"><td class="codekolom"></td><td class="codekolom">4061</td><td class="bredecode">+ * // =&gt; [101, 2, 1, 10, 3]</td></tr><tr><td class="codekolom">3998</td><td class="codekolom">4062</td><td class="bredecode"> */</td></tr><tr class="del"><td class="codekolom">3999</td><td class="codekolom"></td><td class="bredecode">- function union(array) {</td></tr><tr class="del"><td class="codekolom">4000</td><td class="codekolom"></td><td class="bredecode">- if (!isArray(array)) {</td></tr><tr class="del"><td class="codekolom">4001</td><td class="codekolom"></td><td class="bredecode">- arguments[0] = array ? nativeSlice.call(array) : arrayRef;</td></tr><tr class="del"><td class="codekolom">4002</td><td class="codekolom"></td><td class="bredecode">- }</td></tr><tr class="del"><td class="codekolom">4003</td><td class="codekolom"></td><td class="bredecode">- return uniq(concat.apply(arrayRef, arguments));</td></tr><tr class="del"><td class="codekolom">4004</td><td class="codekolom"></td><td class="bredecode">- }</td></tr><tr class="add"><td class="codekolom"></td><td class="codekolom">4063</td><td class="bredecode">+ var union = function(second, first) {</td></tr><tr class="add"><td class="codekolom"></td><td class="codekolom">4064</td><td class="bredecode">+ return uniq( first.concat( second ) );</td></tr><tr class="add"><td class="codekolom"></td><td class="codekolom">4065</td><td class="bredecode">+ }.autoCurry(2);</td></tr><tr><td class="codekolom">4005</td><td class="codekolom">4066</td><td class="bredecode"> </td></tr><tr><td class="codekolom">4006</td><td class="codekolom">4067</td><td class="bredecode"> /**</td></tr><tr><td class="codekolom">4007</td><td class="codekolom">4068</td><td class="bredecode"> * Creates a duplicate-value-free version of the `array` using strict equality</td></tr><tr><td class="codekolom">4008</td><td class="codekolom">4069</td><td class="bredecode"> * for comparisons, i.e. `===`. If the `array` is already sorted, passing `true`</td></tr><tr><td class="codekolom">4009</td><td class="codekolom">4070</td><td class="bredecode"> * for `isSorted` will run a faster algorithm. If `callback` is passed, each</td></tr><tr><td class="codekolom">4010</td><td class="codekolom">4071</td><td class="bredecode"> * element of `array` is passed through the `callback` before uniqueness is computed.</td></tr><tr><td class="codekolom">4011</td><td class="codekolom">4072</td><td class="bredecode"> * The `callback` is bound to `thisArg` and invoked with three arguments; (value, index, array).</td></tr><tr><td class="codekolom">4012</td><td class="codekolom">4073</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">4013</td><td class="codekolom">4074</td><td class="bredecode"> * If a property name is passed for `callback`, the created "_.pluck" style</td></tr><tr><td class="codekolom">4014</td><td class="codekolom">4075</td><td class="bredecode"> * callback will return the property value of the given element.</td></tr><tr><td class="codekolom">4015</td><td class="codekolom">4076</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">4016</td><td class="codekolom">4077</td><td class="bredecode"> * If an object is passed for `callback`, the created "_.where" style callback</td></tr><tr><td class="codekolom">4017</td><td class="codekolom">4078</td><td class="bredecode"> * will return `true` for elements that have the properties of the given object,</td></tr><tr><td class="codekolom">4018</td><td class="codekolom">4079</td><td class="bredecode"> * else `false`.</td></tr><tr><td class="codekolom">4019</td><td class="codekolom">4080</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">4020</td><td class="codekolom">4081</td><td class="bredecode"> * @static</td></tr><tr><td class="codekolom">4021</td><td class="codekolom">4082</td><td class="bredecode"> * @memberOf _</td></tr><tr><td class="codekolom">4022</td><td class="codekolom">4083</td><td class="bredecode"> * @alias unique</td></tr><tr><td class="codekolom">4023</td><td class="codekolom">4084</td><td class="bredecode"> * @category Arrays</td></tr><tr><td class="codekolom">4024</td><td class="codekolom">4085</td><td class="bredecode"> * @param {Array} array The array to process.</td></tr><tr><td class="codekolom">4025</td><td class="codekolom">4086</td><td class="bredecode"> * @param {Boolean} [isSorted=false] A flag to indicate that the `array` is already sorted.</td></tr><tr><td class="codekolom">4026</td><td class="codekolom">4087</td><td class="bredecode"> * @param {Function|Object|String} [callback=identity] The function called per</td></tr><tr><td class="codekolom">4027</td><td class="codekolom">4088</td><td class="bredecode"> * iteration. If a property name or object is passed, it will be used to create</td></tr><tr><td class="codekolom">4028</td><td class="codekolom">4089</td><td class="bredecode"> * a "_.pluck" or "_.where" style callback, respectively.</td></tr><tr><td class="codekolom">4029</td><td class="codekolom">4090</td><td class="bredecode"> * @param {Mixed} [thisArg] The `this` binding of `callback`.</td></tr><tr><td class="codekolom">4030</td><td class="codekolom">4091</td><td class="bredecode"> * @returns {Array} Returns a duplicate-value-free array.</td></tr><tr><td class="codekolom">4031</td><td class="codekolom">4092</td><td class="bredecode"> * @example</td></tr><tr><td class="codekolom">4032</td><td class="codekolom">4093</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">4033</td><td class="codekolom">4094</td><td class="bredecode"> * _.uniq([1, 2, 1, 3, 1]);</td></tr><tr><td class="codekolom">4034</td><td class="codekolom">4095</td><td class="bredecode"> * // =&gt; [1, 2, 3]</td></tr><tr><td class="codekolom">4035</td><td class="codekolom">4096</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">4036</td><td class="codekolom">4097</td><td class="bredecode"> * _.uniq([1, 1, 2, 2, 3], true);</td></tr><tr><td class="codekolom">4037</td><td class="codekolom">4098</td><td class="bredecode"> * // =&gt; [1, 2, 3]</td></tr><tr><td class="codekolom">4038</td><td class="codekolom">4099</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">4039</td><td class="codekolom">4100</td><td class="bredecode"> * _.uniq(['A', 'b', 'C', 'a', 'B', 'c'], function(letter) { return letter.toLowerCase(); });</td></tr><tr><td class="codekolom">4040</td><td class="codekolom">4101</td><td class="bredecode"> * // =&gt; ['A', 'b', 'C']</td></tr><tr><td class="codekolom">4041</td><td class="codekolom">4102</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">4042</td><td class="codekolom">4103</td><td class="bredecode"> * _.uniq([1, 2.5, 3, 1.5, 2, 3.5], function(num) { return this.floor(num); }, Math);</td></tr><tr><td class="codekolom">4043</td><td class="codekolom">4104</td><td class="bredecode"> * // =&gt; [1, 2.5, 3]</td></tr><tr><td class="codekolom">4044</td><td class="codekolom">4105</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">4045</td><td class="codekolom">4106</td><td class="bredecode"> * // using "_.pluck" callback shorthand</td></tr><tr><td class="codekolom">4046</td><td class="codekolom">4107</td><td class="bredecode"> * _.uniq([{ 'x': 1 }, { 'x': 2 }, { 'x': 1 }], 'x');</td></tr><tr><td class="codekolom">4047</td><td class="codekolom">4108</td><td class="bredecode"> * // =&gt; [{ 'x': 1 }, { 'x': 2 }]</td></tr><tr><td class="codekolom">4048</td><td class="codekolom">4109</td><td class="bredecode"> */</td></tr><tr><td class="codekolom">4049</td><td class="codekolom">4110</td><td class="bredecode"> var uniq = overloadWrapper(function(array, isSorted, callback) {</td></tr><tr><td class="codekolom">4050</td><td class="codekolom">4111</td><td class="bredecode"> var index = -1,</td></tr><tr><td class="codekolom">4051</td><td class="codekolom">4112</td><td class="bredecode"> indexOf = getIndexOf(),</td></tr><tr><td class="codekolom">4052</td><td class="codekolom">4113</td><td class="bredecode"> length = array ? array.length : 0,</td></tr><tr><td class="codekolom">4053</td><td class="codekolom">4114</td><td class="bredecode"> result = [];</td></tr><tr><td class="codekolom">4054</td><td class="codekolom">4115</td><td class="bredecode"> </td></tr><tr><td class="codekolom">4055</td><td class="codekolom">4116</td><td class="bredecode"> var isLarge = !isSorted &amp;&amp; length &gt;= largeArraySize &amp;&amp; indexOf === basicIndexOf,</td></tr><tr><td class="codekolom">4056</td><td class="codekolom">4117</td><td class="bredecode"> seen = (callback || isLarge) ? getArray() : result;</td></tr><tr><td class="codekolom">4057</td><td class="codekolom">4118</td><td class="bredecode"> </td></tr><tr><td class="codekolom">4058</td><td class="codekolom">4119</td><td class="bredecode"> if (isLarge) {</td></tr><tr><td class="codekolom">4059</td><td class="codekolom">4120</td><td class="bredecode"> var cache = createCache(seen);</td></tr><tr><td class="codekolom">4060</td><td class="codekolom">4121</td><td class="bredecode"> if (cache) {</td></tr><tr><td class="codekolom">4061</td><td class="codekolom">4122</td><td class="bredecode"> indexOf = cacheIndexOf;</td></tr><tr><td class="codekolom">4062</td><td class="codekolom">4123</td><td class="bredecode"> seen = cache;</td></tr><tr><td class="codekolom">4063</td><td class="codekolom">4124</td><td class="bredecode"> } else {</td></tr><tr><td class="codekolom">4064</td><td class="codekolom">4125</td><td class="bredecode"> isLarge = false;</td></tr><tr><td class="codekolom">4065</td><td class="codekolom">4126</td><td class="bredecode"> seen = callback ? seen : (releaseArray(seen), result);</td></tr><tr><td class="codekolom">4066</td><td class="codekolom">4127</td><td class="bredecode"> }</td></tr><tr><td class="codekolom">4067</td><td class="codekolom">4128</td><td class="bredecode"> }</td></tr><tr><td class="codekolom">4068</td><td class="codekolom">4129</td><td class="bredecode"> while (++index &lt; length) {</td></tr><tr><td class="codekolom">4069</td><td class="codekolom">4130</td><td class="bredecode"> var value = array[index],</td></tr><tr><td class="codekolom">4070</td><td class="codekolom">4131</td><td class="bredecode"> computed = callback ? callback(value, index, array) : value;</td></tr><tr><td class="codekolom">4071</td><td class="codekolom">4132</td><td class="bredecode"> </td></tr><tr><td class="codekolom">4072</td><td class="codekolom">4133</td><td class="bredecode"> if (isSorted</td></tr><tr><td class="codekolom">4073</td><td class="codekolom">4134</td><td class="bredecode"> ? !index || seen[seen.length - 1] !== computed</td></tr><tr><td class="codekolom">4074</td><td class="codekolom">4135</td><td class="bredecode"> : indexOf(seen, computed) &lt; 0</td></tr><tr><td class="codekolom">4075</td><td class="codekolom">4136</td><td class="bredecode"> ) {</td></tr><tr><td class="codekolom">4076</td><td class="codekolom">4137</td><td class="bredecode"> if (callback || isLarge) {</td></tr><tr><td class="codekolom">4077</td><td class="codekolom">4138</td><td class="bredecode"> seen.push(computed);</td></tr><tr><td class="codekolom">4078</td><td class="codekolom">4139</td><td class="bredecode"> }</td></tr><tr><td class="codekolom">4079</td><td class="codekolom">4140</td><td class="bredecode"> result.push(value);</td></tr><tr><td class="codekolom">4080</td><td class="codekolom">4141</td><td class="bredecode"> }</td></tr><tr><td class="codekolom">4081</td><td class="codekolom">4142</td><td class="bredecode"> }</td></tr><tr><td class="codekolom">4082</td><td class="codekolom">4143</td><td class="bredecode"> if (isLarge) {</td></tr><tr><td class="codekolom">4083</td><td class="codekolom">4144</td><td class="bredecode"> releaseArray(seen.array);</td></tr><tr><td class="codekolom">4084</td><td class="codekolom">4145</td><td class="bredecode"> releaseObject(seen);</td></tr><tr><td class="codekolom">4085</td><td class="codekolom">4146</td><td class="bredecode"> } else if (callback) {</td></tr><tr><td class="codekolom">4086</td><td class="codekolom">4147</td><td class="bredecode"> releaseArray(seen);</td></tr><tr><td class="codekolom">4087</td><td class="codekolom">4148</td><td class="bredecode"> }</td></tr><tr><td class="codekolom">4088</td><td class="codekolom">4149</td><td class="bredecode"> return result;</td></tr><tr><td class="codekolom">4089</td><td class="codekolom">4150</td><td class="bredecode"> });</td></tr><tr><td class="codekolom">4090</td><td class="codekolom">4151</td><td class="bredecode"> </td></tr><tr><td class="codekolom">4091</td><td class="codekolom">4152</td><td class="bredecode"> /**</td></tr><tr><td class="codekolom">4092</td><td class="codekolom">4153</td><td class="bredecode"> * The inverse of `_.zip`, this method splits groups of elements into arrays</td></tr><tr><td class="codekolom">4093</td><td class="codekolom">4154</td><td class="bredecode"> * composed of elements from each group at their corresponding indexes.</td></tr><tr><td class="codekolom">4094</td><td class="codekolom">4155</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">4095</td><td class="codekolom">4156</td><td class="bredecode"> * @static</td></tr><tr><td class="codekolom">4096</td><td class="codekolom">4157</td><td class="bredecode"> * @memberOf _</td></tr><tr><td class="codekolom">4097</td><td class="codekolom">4158</td><td class="bredecode"> * @category Arrays</td></tr><tr><td class="codekolom">4098</td><td class="codekolom">4159</td><td class="bredecode"> * @param {Array} array The array to process.</td></tr><tr><td class="codekolom">4099</td><td class="codekolom">4160</td><td class="bredecode"> * @returns {Array} Returns a new array of the composed arrays.</td></tr><tr><td class="codekolom">4100</td><td class="codekolom">4161</td><td class="bredecode"> * @example</td></tr><tr><td class="codekolom">4101</td><td class="codekolom">4162</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">4102</td><td class="codekolom">4163</td><td class="bredecode"> * _.unzip([['moe', 30, true], ['larry', 40, false]]);</td></tr><tr><td class="codekolom">4103</td><td class="codekolom">4164</td><td class="bredecode"> * // =&gt; [['moe', 'larry'], [30, 40], [true, false]];</td></tr><tr><td class="codekolom">4104</td><td class="codekolom">4165</td><td class="bredecode"> */</td></tr><tr><td class="codekolom">4105</td><td class="codekolom">4166</td><td class="bredecode"> function unzip(array) {</td></tr><tr><td class="codekolom">4106</td><td class="codekolom">4167</td><td class="bredecode"> var index = -1,</td></tr><tr><td class="codekolom">4107</td><td class="codekolom">4168</td><td class="bredecode"> length = array ? max(pluck(array, 'length')) : 0,</td></tr><tr><td class="codekolom">4108</td><td class="codekolom">4169</td><td class="bredecode"> result = Array(length &lt; 0 ? 0 : length);</td></tr><tr><td class="codekolom">4109</td><td class="codekolom">4170</td><td class="bredecode"> </td></tr><tr><td class="codekolom">4110</td><td class="codekolom">4171</td><td class="bredecode"> while (++index &lt; length) {</td></tr><tr><td class="codekolom">4111</td><td class="codekolom">4172</td><td class="bredecode"> result[index] = pluck(array, index);</td></tr><tr><td class="codekolom">4112</td><td class="codekolom">4173</td><td class="bredecode"> }</td></tr><tr><td class="codekolom">4113</td><td class="codekolom">4174</td><td class="bredecode"> return result;</td></tr><tr><td class="codekolom">4114</td><td class="codekolom">4175</td><td class="bredecode"> }</td></tr><tr><td class="codekolom">4115</td><td class="codekolom">4176</td><td class="bredecode"> </td></tr><tr><td class="codekolom">4116</td><td class="codekolom">4177</td><td class="bredecode"> /**</td></tr><tr><td class="codekolom">4117</td><td class="codekolom">4178</td><td class="bredecode"> * Creates an array with all occurrences of the passed values removed using</td></tr><tr><td class="codekolom">4118</td><td class="codekolom">4179</td><td class="bredecode"> * strict equality for comparisons, i.e. `===`.</td></tr><tr><td class="codekolom">4119</td><td class="codekolom">4180</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">4120</td><td class="codekolom">4181</td><td class="bredecode"> * @static</td></tr><tr><td class="codekolom">4121</td><td class="codekolom">4182</td><td class="bredecode"> * @memberOf _</td></tr><tr><td class="codekolom">4122</td><td class="codekolom">4183</td><td class="bredecode"> * @category Arrays</td></tr><tr><td class="codekolom">4123</td><td class="codekolom">4184</td><td class="bredecode"> * @param {Array} array The array to filter.</td></tr><tr><td class="codekolom">4124</td><td class="codekolom">4185</td><td class="bredecode"> * @param {Mixed} [value1, value2, ...] Values to remove.</td></tr><tr><td class="codekolom">4125</td><td class="codekolom">4186</td><td class="bredecode"> * @returns {Array} Returns a new filtered array.</td></tr><tr><td class="codekolom">4126</td><td class="codekolom">4187</td><td class="bredecode"> * @example</td></tr><tr><td class="codekolom">4127</td><td class="codekolom">4188</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">4128</td><td class="codekolom">4189</td><td class="bredecode"> * _.without([1, 2, 1, 0, 3, 1, 4], 0, 1);</td></tr><tr><td class="codekolom">4129</td><td class="codekolom">4190</td><td class="bredecode"> * // =&gt; [2, 3, 4]</td></tr><tr><td class="codekolom">4130</td><td class="codekolom">4191</td><td class="bredecode"> */</td></tr><tr><td class="codekolom">4131</td><td class="codekolom">4192</td><td class="bredecode"> function without(array) {</td></tr><tr><td class="codekolom">4132</td><td class="codekolom">4193</td><td class="bredecode"> return difference(array, nativeSlice.call(arguments, 1));</td></tr><tr><td class="codekolom">4133</td><td class="codekolom">4194</td><td class="bredecode"> }</td></tr><tr><td class="codekolom">4134</td><td class="codekolom">4195</td><td class="bredecode"> </td></tr><tr><td class="codekolom">4135</td><td class="codekolom">4196</td><td class="bredecode"> /**</td></tr><tr><td class="codekolom">4136</td><td class="codekolom">4197</td><td class="bredecode"> * Groups the elements of each array at their corresponding indexes. Useful for</td></tr><tr><td class="codekolom">4137</td><td class="codekolom">4198</td><td class="bredecode"> * separate data sources that are coordinated through matching array indexes.</td></tr><tr><td class="codekolom">4138</td><td class="codekolom">4199</td><td class="bredecode"> * For a matrix of nested arrays, `_.zip.apply(...)` can transpose the matrix</td></tr><tr><td class="codekolom">4139</td><td class="codekolom">4200</td><td class="bredecode"> * in a similar fashion.</td></tr><tr><td class="codekolom">4140</td><td class="codekolom">4201</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">4141</td><td class="codekolom">4202</td><td class="bredecode"> * @static</td></tr><tr><td class="codekolom">4142</td><td class="codekolom">4203</td><td class="bredecode"> * @memberOf _</td></tr><tr><td class="codekolom">4143</td><td class="codekolom">4204</td><td class="bredecode"> * @category Arrays</td></tr><tr><td class="codekolom">4144</td><td class="codekolom">4205</td><td class="bredecode"> * @param {Array} [array1, array2, ...] Arrays to process.</td></tr><tr><td class="codekolom">4145</td><td class="codekolom">4206</td><td class="bredecode"> * @returns {Array} Returns a new array of grouped elements.</td></tr><tr><td class="codekolom">4146</td><td class="codekolom">4207</td><td class="bredecode"> * @example</td></tr><tr><td class="codekolom">4147</td><td class="codekolom">4208</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">4148</td><td class="codekolom">4209</td><td class="bredecode"> * _.zip(['moe', 'larry'], [30, 40], [true, false]);</td></tr><tr><td class="codekolom">4149</td><td class="codekolom">4210</td><td class="bredecode"> * // =&gt; [['moe', 30, true], ['larry', 40, false]]</td></tr><tr><td class="codekolom">4150</td><td class="codekolom">4211</td><td class="bredecode"> */</td></tr><tr><td class="codekolom">4151</td><td class="codekolom">4212</td><td class="bredecode"> function zip(array) {</td></tr><tr><td class="codekolom">4152</td><td class="codekolom">4213</td><td class="bredecode"> return array ? unzip(arguments) : [];</td></tr><tr><td class="codekolom">4153</td><td class="codekolom">4214</td><td class="bredecode"> }</td></tr><tr><td class="codekolom">4154</td><td class="codekolom">4215</td><td class="bredecode"> </td></tr><tr><td class="codekolom">4155</td><td class="codekolom">4216</td><td class="bredecode"> /**</td></tr><tr><td class="codekolom">4156</td><td class="codekolom">4217</td><td class="bredecode"> * Creates an object composed from arrays of `keys` and `values`. Pass either</td></tr><tr><td class="codekolom">4157</td><td class="codekolom">4218</td><td class="bredecode"> * a single two dimensional array, i.e. `[[key1, value1], [key2, value2]]`, or</td></tr><tr><td class="codekolom">4158</td><td class="codekolom">4219</td><td class="bredecode"> * two arrays, one of `keys` and one of corresponding `values`.</td></tr><tr><td class="codekolom">4159</td><td class="codekolom">4220</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">4160</td><td class="codekolom">4221</td><td class="bredecode"> * @static</td></tr><tr><td class="codekolom">4161</td><td class="codekolom">4222</td><td class="bredecode"> * @memberOf _</td></tr><tr><td class="codekolom">4162</td><td class="codekolom">4223</td><td class="bredecode"> * @alias object</td></tr><tr><td class="codekolom">4163</td><td class="codekolom">4224</td><td class="bredecode"> * @category Arrays</td></tr><tr><td class="codekolom">4164</td><td class="codekolom">4225</td><td class="bredecode"> * @param {Array} keys The array of keys.</td></tr><tr><td class="codekolom">4165</td><td class="codekolom">4226</td><td class="bredecode"> * @param {Array} [values=[]] The array of values.</td></tr><tr><td class="codekolom">4166</td><td class="codekolom">4227</td><td class="bredecode"> * @returns {Object} Returns an object composed of the given keys and</td></tr><tr><td class="codekolom">4167</td><td class="codekolom">4228</td><td class="bredecode"> * corresponding values.</td></tr><tr><td class="codekolom">4168</td><td class="codekolom">4229</td><td class="bredecode"> * @example</td></tr><tr><td class="codekolom">4169</td><td class="codekolom">4230</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">4170</td><td class="codekolom">4231</td><td class="bredecode"> * _.zipObject(['moe', 'larry'], [30, 40]);</td></tr><tr><td class="codekolom">4171</td><td class="codekolom">4232</td><td class="bredecode"> * // =&gt; { 'moe': 30, 'larry': 40 }</td></tr><tr><td class="codekolom">4172</td><td class="codekolom">4233</td><td class="bredecode"> */</td></tr><tr><td class="codekolom">4173</td><td class="codekolom">4234</td><td class="bredecode"> function zipObject(keys, values) {</td></tr><tr><td class="codekolom">4174</td><td class="codekolom">4235</td><td class="bredecode"> var index = -1,</td></tr><tr><td class="codekolom">4175</td><td class="codekolom">4236</td><td class="bredecode"> length = keys ? keys.length : 0,</td></tr><tr><td class="codekolom">4176</td><td class="codekolom">4237</td><td class="bredecode"> result = {};</td></tr><tr><td class="codekolom">4177</td><td class="codekolom">4238</td><td class="bredecode"> </td></tr><tr><td class="codekolom">4178</td><td class="codekolom">4239</td><td class="bredecode"> while (++index &lt; length) {</td></tr><tr><td class="codekolom">4179</td><td class="codekolom">4240</td><td class="bredecode"> var key = keys[index];</td></tr><tr><td class="codekolom">4180</td><td class="codekolom">4241</td><td class="bredecode"> if (values) {</td></tr><tr><td class="codekolom">4181</td><td class="codekolom">4242</td><td class="bredecode"> result[key] = values[index];</td></tr><tr><td class="codekolom">4182</td><td class="codekolom">4243</td><td class="bredecode"> } else {</td></tr><tr><td class="codekolom">4183</td><td class="codekolom">4244</td><td class="bredecode"> result[key[0]] = key[1];</td></tr><tr><td class="codekolom">4184</td><td class="codekolom">4245</td><td class="bredecode"> }</td></tr><tr><td class="codekolom">4185</td><td class="codekolom">4246</td><td class="bredecode"> }</td></tr><tr><td class="codekolom">4186</td><td class="codekolom">4247</td><td class="bredecode"> return result;</td></tr><tr><td class="codekolom">4187</td><td class="codekolom">4248</td><td class="bredecode"> }</td></tr><tr><td class="codekolom">4188</td><td class="codekolom">4249</td><td class="bredecode"> </td></tr><tr><td class="codekolom">4189</td><td class="codekolom">4250</td><td class="bredecode"> /*--------------------------------------------------------------------------*/</td></tr><tr><td class="codekolom">4190</td><td class="codekolom">4251</td><td class="bredecode"> </td></tr><tr><td class="codekolom">4191</td><td class="codekolom">4252</td><td class="bredecode"> /**</td></tr><tr><td class="codekolom">4192</td><td class="codekolom">4253</td><td class="bredecode"> * If `n` is greater than `0`, a function is created that is restricted to</td></tr><tr><td class="codekolom">4193</td><td class="codekolom">4254</td><td class="bredecode"> * executing `func`, with the `this` binding and arguments of the created</td></tr><tr><td class="codekolom">4194</td><td class="codekolom">4255</td><td class="bredecode"> * function, only after it is called `n` times. If `n` is less than `1`,</td></tr><tr><td class="codekolom">4195</td><td class="codekolom">4256</td><td class="bredecode"> * `func` is executed immediately, without a `this` binding or additional</td></tr><tr><td class="codekolom">4196</td><td class="codekolom">4257</td><td class="bredecode"> * arguments, and its result is returned.</td></tr><tr><td class="codekolom">4197</td><td class="codekolom">4258</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">4198</td><td class="codekolom">4259</td><td class="bredecode"> * @static</td></tr><tr><td class="codekolom">4199</td><td class="codekolom">4260</td><td class="bredecode"> * @memberOf _</td></tr><tr><td class="codekolom">4200</td><td class="codekolom">4261</td><td class="bredecode"> * @category Functions</td></tr><tr><td class="codekolom">4201</td><td class="codekolom">4262</td><td class="bredecode"> * @param {Number} n The number of times the function must be called before</td></tr><tr><td class="codekolom">4202</td><td class="codekolom">4263</td><td class="bredecode"> * it is executed.</td></tr><tr><td class="codekolom">4203</td><td class="codekolom">4264</td><td class="bredecode"> * @param {Function} func The function to restrict.</td></tr><tr><td class="codekolom">4204</td><td class="codekolom">4265</td><td class="bredecode"> * @returns {Function} Returns the new restricted function.</td></tr><tr><td class="codekolom">4205</td><td class="codekolom">4266</td><td class="bredecode"> * @example</td></tr><tr><td class="codekolom">4206</td><td class="codekolom">4267</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">4207</td><td class="codekolom">4268</td><td class="bredecode"> * var renderNotes = _.after(notes.length, render);</td></tr><tr><td class="codekolom">4208</td><td class="codekolom">4269</td><td class="bredecode"> * _.forEach(notes, function(note) {</td></tr><tr><td class="codekolom">4209</td><td class="codekolom">4270</td><td class="bredecode"> * note.asyncSave({ 'success': renderNotes });</td></tr><tr><td class="codekolom">4210</td><td class="codekolom">4271</td><td class="bredecode"> * });</td></tr><tr><td class="codekolom">4211</td><td class="codekolom">4272</td><td class="bredecode"> * // `renderNotes` is run once, after all notes have saved</td></tr><tr><td class="codekolom">4212</td><td class="codekolom">4273</td><td class="bredecode"> */</td></tr><tr><td class="codekolom">4213</td><td class="codekolom">4274</td><td class="bredecode"> function after(n, func) {</td></tr><tr><td class="codekolom">4214</td><td class="codekolom">4275</td><td class="bredecode"> if (n &lt; 1) {</td></tr><tr><td class="codekolom">4215</td><td class="codekolom">4276</td><td class="bredecode"> return func();</td></tr><tr><td class="codekolom">4216</td><td class="codekolom">4277</td><td class="bredecode"> }</td></tr><tr><td class="codekolom">4217</td><td class="codekolom">4278</td><td class="bredecode"> return function() {</td></tr><tr><td class="codekolom">4218</td><td class="codekolom">4279</td><td class="bredecode"> if (--n &lt; 1) {</td></tr><tr><td class="codekolom">4219</td><td class="codekolom">4280</td><td class="bredecode"> return func.apply(this, arguments);</td></tr><tr><td class="codekolom">4220</td><td class="codekolom">4281</td><td class="bredecode"> }</td></tr><tr><td class="codekolom">4221</td><td class="codekolom">4282</td><td class="bredecode"> };</td></tr><tr><td class="codekolom">4222</td><td class="codekolom">4283</td><td class="bredecode"> }</td></tr><tr><td class="codekolom">4223</td><td class="codekolom">4284</td><td class="bredecode"> </td></tr><tr><td class="codekolom">4224</td><td class="codekolom">4285</td><td class="bredecode"> /**</td></tr><tr><td class="codekolom">4225</td><td class="codekolom">4286</td><td class="bredecode"> * Creates a function that, when called, invokes `func` with the `this`</td></tr><tr><td class="codekolom">4226</td><td class="codekolom">4287</td><td class="bredecode"> * binding of `thisArg` and prepends any additional `bind` arguments to those</td></tr><tr><td class="codekolom">4227</td><td class="codekolom">4288</td><td class="bredecode"> * passed to the bound function.</td></tr><tr><td class="codekolom">4228</td><td class="codekolom">4289</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">4229</td><td class="codekolom">4290</td><td class="bredecode"> * @static</td></tr><tr><td class="codekolom">4230</td><td class="codekolom">4291</td><td class="bredecode"> * @memberOf _</td></tr><tr><td class="codekolom">4231</td><td class="codekolom">4292</td><td class="bredecode"> * @category Functions</td></tr><tr><td class="codekolom">4232</td><td class="codekolom">4293</td><td class="bredecode"> * @param {Function} func The function to bind.</td></tr><tr><td class="codekolom">4233</td><td class="codekolom">4294</td><td class="bredecode"> * @param {Mixed} [thisArg] The `this` binding of `func`.</td></tr><tr><td class="codekolom">4234</td><td class="codekolom">4295</td><td class="bredecode"> * @param {Mixed} [arg1, arg2, ...] Arguments to be partially applied.</td></tr><tr><td class="codekolom">4235</td><td class="codekolom">4296</td><td class="bredecode"> * @returns {Function} Returns the new bound function.</td></tr><tr><td class="codekolom">4236</td><td class="codekolom">4297</td><td class="bredecode"> * @example</td></tr><tr><td class="codekolom">4237</td><td class="codekolom">4298</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">4238</td><td class="codekolom">4299</td><td class="bredecode"> * var func = function(greeting) {</td></tr><tr><td class="codekolom">4239</td><td class="codekolom">4300</td><td class="bredecode"> * return greeting + ' ' + this.name;</td></tr><tr><td class="codekolom">4240</td><td class="codekolom">4301</td><td class="bredecode"> * };</td></tr><tr><td class="codekolom">4241</td><td class="codekolom">4302</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">4242</td><td class="codekolom">4303</td><td class="bredecode"> * func = _.bind(func, { 'name': 'moe' }, 'hi');</td></tr><tr><td class="codekolom">4243</td><td class="codekolom">4304</td><td class="bredecode"> * func();</td></tr><tr><td class="codekolom">4244</td><td class="codekolom">4305</td><td class="bredecode"> * // =&gt; 'hi moe'</td></tr><tr><td class="codekolom">4245</td><td class="codekolom">4306</td><td class="bredecode"> */</td></tr><tr><td class="codekolom">4246</td><td class="codekolom">4307</td><td class="bredecode"> function bind(func, thisArg) {</td></tr><tr><td class="codekolom">4247</td><td class="codekolom">4308</td><td class="bredecode"> // use `Function#bind` if it exists and is fast</td></tr><tr><td class="codekolom">4248</td><td class="codekolom">4309</td><td class="bredecode"> // (in V8 `Function#bind` is slower except when partially applied)</td></tr><tr><td class="codekolom">4249</td><td class="codekolom">4310</td><td class="bredecode"> return support.fastBind || (nativeBind &amp;&amp; arguments.length &gt; 2)</td></tr><tr><td class="codekolom">4250</td><td class="codekolom">4311</td><td class="bredecode"> ? nativeBind.call.apply(nativeBind, arguments)</td></tr><tr><td class="codekolom">4251</td><td class="codekolom">4312</td><td class="bredecode"> : createBound(func, thisArg, nativeSlice.call(arguments, 2));</td></tr><tr><td class="codekolom">4252</td><td class="codekolom">4313</td><td class="bredecode"> }</td></tr><tr><td class="codekolom">4253</td><td class="codekolom">4314</td><td class="bredecode"> </td></tr><tr><td class="codekolom">4254</td><td class="codekolom">4315</td><td class="bredecode"> /**</td></tr><tr><td class="codekolom">4255</td><td class="codekolom">4316</td><td class="bredecode"> * Binds methods on `object` to `object`, overwriting the existing method.</td></tr><tr><td class="codekolom">4256</td><td class="codekolom">4317</td><td class="bredecode"> * Method names may be specified as individual arguments or as arrays of method</td></tr><tr><td class="codekolom">4257</td><td class="codekolom">4318</td><td class="bredecode"> * names. If no method names are provided, all the function properties of `object`</td></tr><tr><td class="codekolom">4258</td><td class="codekolom">4319</td><td class="bredecode"> * will be bound.</td></tr><tr><td class="codekolom">4259</td><td class="codekolom">4320</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">4260</td><td class="codekolom">4321</td><td class="bredecode"> * @static</td></tr><tr><td class="codekolom">4261</td><td class="codekolom">4322</td><td class="bredecode"> * @memberOf _</td></tr><tr><td class="codekolom">4262</td><td class="codekolom">4323</td><td class="bredecode"> * @category Functions</td></tr><tr><td class="codekolom">4263</td><td class="codekolom">4324</td><td class="bredecode"> * @param {Object} object The object to bind and assign the bound methods to.</td></tr><tr><td class="codekolom">4264</td><td class="codekolom">4325</td><td class="bredecode"> * @param {String} [methodName1, methodName2, ...] Method names on the object to bind.</td></tr><tr><td class="codekolom">4265</td><td class="codekolom">4326</td><td class="bredecode"> * @returns {Object} Returns `object`.</td></tr><tr><td class="codekolom">4266</td><td class="codekolom">4327</td><td class="bredecode"> * @example</td></tr><tr><td class="codekolom">4267</td><td class="codekolom">4328</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">4268</td><td class="codekolom">4329</td><td class="bredecode"> * var view = {</td></tr><tr><td class="codekolom">4269</td><td class="codekolom">4330</td><td class="bredecode"> * 'label': 'docs',</td></tr><tr><td class="codekolom">4270</td><td class="codekolom">4331</td><td class="bredecode"> * 'onClick': function() { alert('clicked ' + this.label); }</td></tr><tr><td class="codekolom">4271</td><td class="codekolom">4332</td><td class="bredecode"> * };</td></tr><tr><td class="codekolom">4272</td><td class="codekolom">4333</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">4273</td><td class="codekolom">4334</td><td class="bredecode"> * _.bindAll(view);</td></tr><tr><td class="codekolom">4274</td><td class="codekolom">4335</td><td class="bredecode"> * jQuery('#docs').on('click', view.onClick);</td></tr><tr><td class="codekolom">4275</td><td class="codekolom">4336</td><td class="bredecode"> * // =&gt; alerts 'clicked docs', when the button is clicked</td></tr><tr><td class="codekolom">4276</td><td class="codekolom">4337</td><td class="bredecode"> */</td></tr><tr><td class="codekolom">4277</td><td class="codekolom">4338</td><td class="bredecode"> function bindAll(object) {</td></tr><tr><td class="codekolom">4278</td><td class="codekolom">4339</td><td class="bredecode"> var funcs = arguments.length &gt; 1 ? concat.apply(arrayRef, nativeSlice.call(arguments, 1)) : functions(object),</td></tr><tr><td class="codekolom">4279</td><td class="codekolom">4340</td><td class="bredecode"> index = -1,</td></tr><tr><td class="codekolom">4280</td><td class="codekolom">4341</td><td class="bredecode"> length = funcs.length;</td></tr><tr><td class="codekolom">4281</td><td class="codekolom">4342</td><td class="bredecode"> </td></tr><tr><td class="codekolom">4282</td><td class="codekolom">4343</td><td class="bredecode"> while (++index &lt; length) {</td></tr><tr><td class="codekolom">4283</td><td class="codekolom">4344</td><td class="bredecode"> var key = funcs[index];</td></tr><tr><td class="codekolom">4284</td><td class="codekolom">4345</td><td class="bredecode"> object[key] = bind(object[key], object);</td></tr><tr><td class="codekolom">4285</td><td class="codekolom">4346</td><td class="bredecode"> }</td></tr><tr><td class="codekolom">4286</td><td class="codekolom">4347</td><td class="bredecode"> return object;</td></tr><tr><td class="codekolom">4287</td><td class="codekolom">4348</td><td class="bredecode"> }</td></tr><tr><td class="codekolom">4288</td><td class="codekolom">4349</td><td class="bredecode"> </td></tr><tr><td class="codekolom">4289</td><td class="codekolom">4350</td><td class="bredecode"> /**</td></tr><tr><td class="codekolom">4290</td><td class="codekolom">4351</td><td class="bredecode"> * Creates a function that, when called, invokes the method at `object[key]`</td></tr><tr><td class="codekolom">4291</td><td class="codekolom">4352</td><td class="bredecode"> * and prepends any additional `bindKey` arguments to those passed to the bound</td></tr><tr><td class="codekolom">4292</td><td class="codekolom">4353</td><td class="bredecode"> * function. This method differs from `_.bind` by allowing bound functions to</td></tr><tr><td class="codekolom">4293</td><td class="codekolom">4354</td><td class="bredecode"> * reference methods that will be redefined or don't yet exist.</td></tr><tr><td class="codekolom">4294</td><td class="codekolom">4355</td><td class="bredecode"> * See http://michaux.ca/articles/lazy-function-definition-pattern.</td></tr><tr><td class="codekolom">4295</td><td class="codekolom">4356</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">4296</td><td class="codekolom">4357</td><td class="bredecode"> * @static</td></tr><tr><td class="codekolom">4297</td><td class="codekolom">4358</td><td class="bredecode"> * @memberOf _</td></tr><tr><td class="codekolom">4298</td><td class="codekolom">4359</td><td class="bredecode"> * @category Functions</td></tr><tr><td class="codekolom">4299</td><td class="codekolom">4360</td><td class="bredecode"> * @param {Object} object The object the method belongs to.</td></tr><tr><td class="codekolom">4300</td><td class="codekolom">4361</td><td class="bredecode"> * @param {String} key The key of the method.</td></tr><tr><td class="codekolom">4301</td><td class="codekolom">4362</td><td class="bredecode"> * @param {Mixed} [arg1, arg2, ...] Arguments to be partially applied.</td></tr><tr><td class="codekolom">4302</td><td class="codekolom">4363</td><td class="bredecode"> * @returns {Function} Returns the new bound function.</td></tr><tr><td class="codekolom">4303</td><td class="codekolom">4364</td><td class="bredecode"> * @example</td></tr><tr><td class="codekolom">4304</td><td class="codekolom">4365</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">4305</td><td class="codekolom">4366</td><td class="bredecode"> * var object = {</td></tr><tr><td class="codekolom">4306</td><td class="codekolom">4367</td><td class="bredecode"> * 'name': 'moe',</td></tr><tr><td class="codekolom">4307</td><td class="codekolom">4368</td><td class="bredecode"> * 'greet': function(greeting) {</td></tr><tr><td class="codekolom">4308</td><td class="codekolom">4369</td><td class="bredecode"> * return greeting + ' ' + this.name;</td></tr><tr><td class="codekolom">4309</td><td class="codekolom">4370</td><td class="bredecode"> * }</td></tr><tr><td class="codekolom">4310</td><td class="codekolom">4371</td><td class="bredecode"> * };</td></tr><tr><td class="codekolom">4311</td><td class="codekolom">4372</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">4312</td><td class="codekolom">4373</td><td class="bredecode"> * var func = _.bindKey(object, 'greet', 'hi');</td></tr><tr><td class="codekolom">4313</td><td class="codekolom">4374</td><td class="bredecode"> * func();</td></tr><tr><td class="codekolom">4314</td><td class="codekolom">4375</td><td class="bredecode"> * // =&gt; 'hi moe'</td></tr><tr><td class="codekolom">4315</td><td class="codekolom">4376</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">4316</td><td class="codekolom">4377</td><td class="bredecode"> * object.greet = function(greeting) {</td></tr><tr><td class="codekolom">4317</td><td class="codekolom">4378</td><td class="bredecode"> * return greeting + ', ' + this.name + '!';</td></tr><tr><td class="codekolom">4318</td><td class="codekolom">4379</td><td class="bredecode"> * };</td></tr><tr><td class="codekolom">4319</td><td class="codekolom">4380</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">4320</td><td class="codekolom">4381</td><td class="bredecode"> * func();</td></tr><tr><td class="codekolom">4321</td><td class="codekolom">4382</td><td class="bredecode"> * // =&gt; 'hi, moe!'</td></tr><tr><td class="codekolom">4322</td><td class="codekolom">4383</td><td class="bredecode"> */</td></tr><tr><td class="codekolom">4323</td><td class="codekolom">4384</td><td class="bredecode"> function bindKey(object, key) {</td></tr><tr><td class="codekolom">4324</td><td class="codekolom">4385</td><td class="bredecode"> return createBound(object, key, nativeSlice.call(arguments, 2), indicatorObject);</td></tr><tr><td class="codekolom">4325</td><td class="codekolom">4386</td><td class="bredecode"> }</td></tr><tr><td class="codekolom">4326</td><td class="codekolom">4387</td><td class="bredecode"> </td></tr><tr><td class="codekolom">4327</td><td class="codekolom">4388</td><td class="bredecode"> /**</td></tr><tr><td class="codekolom">4328</td><td class="codekolom">4389</td><td class="bredecode"> * Creates a function that is the composition of the passed functions,</td></tr><tr><td class="codekolom">4329</td><td class="codekolom">4390</td><td class="bredecode"> * where each function consumes the return value of the function that follows.</td></tr><tr><td class="codekolom">4330</td><td class="codekolom">4391</td><td class="bredecode"> * For example, composing the functions `f()`, `g()`, and `h()` produces `f(g(h()))`.</td></tr><tr><td class="codekolom">4331</td><td class="codekolom">4392</td><td class="bredecode"> * Each function is executed with the `this` binding of the composed function.</td></tr><tr><td class="codekolom">4332</td><td class="codekolom">4393</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">4333</td><td class="codekolom">4394</td><td class="bredecode"> * @static</td></tr><tr><td class="codekolom">4334</td><td class="codekolom">4395</td><td class="bredecode"> * @memberOf _</td></tr><tr><td class="codekolom">4335</td><td class="codekolom">4396</td><td class="bredecode"> * @category Functions</td></tr><tr><td class="codekolom">4336</td><td class="codekolom">4397</td><td class="bredecode"> * @param {Function} [func1, func2, ...] Functions to compose.</td></tr><tr><td class="codekolom">4337</td><td class="codekolom">4398</td><td class="bredecode"> * @returns {Function} Returns the new composed function.</td></tr><tr><td class="codekolom">4338</td><td class="codekolom">4399</td><td class="bredecode"> * @example</td></tr><tr><td class="codekolom">4339</td><td class="codekolom">4400</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">4340</td><td class="codekolom">4401</td><td class="bredecode"> * var greet = function(name) { return 'hi ' + name; };</td></tr><tr><td class="codekolom">4341</td><td class="codekolom">4402</td><td class="bredecode"> * var exclaim = function(statement) { return statement + '!'; };</td></tr><tr><td class="codekolom">4342</td><td class="codekolom">4403</td><td class="bredecode"> * var welcome = _.compose(exclaim, greet);</td></tr><tr><td class="codekolom">4343</td><td class="codekolom">4404</td><td class="bredecode"> * welcome('moe');</td></tr><tr><td class="codekolom">4344</td><td class="codekolom">4405</td><td class="bredecode"> * // =&gt; 'hi moe!'</td></tr><tr><td class="codekolom">4345</td><td class="codekolom">4406</td><td class="bredecode"> */</td></tr><tr><td class="codekolom">4346</td><td class="codekolom">4407</td><td class="bredecode"> function compose() {</td></tr><tr><td class="codekolom">4347</td><td class="codekolom">4408</td><td class="bredecode"> var funcs = arguments;</td></tr><tr><td class="codekolom">4348</td><td class="codekolom">4409</td><td class="bredecode"> return function() {</td></tr><tr><td class="codekolom">4349</td><td class="codekolom">4410</td><td class="bredecode"> var args = arguments,</td></tr><tr><td class="codekolom">4350</td><td class="codekolom">4411</td><td class="bredecode"> length = funcs.length;</td></tr><tr><td class="codekolom">4351</td><td class="codekolom">4412</td><td class="bredecode"> </td></tr><tr><td class="codekolom">4352</td><td class="codekolom">4413</td><td class="bredecode"> while (length--) {</td></tr><tr><td class="codekolom">4353</td><td class="codekolom">4414</td><td class="bredecode"> args = [funcs[length].apply(this, args)];</td></tr><tr><td class="codekolom">4354</td><td class="codekolom">4415</td><td class="bredecode"> }</td></tr><tr><td class="codekolom">4355</td><td class="codekolom">4416</td><td class="bredecode"> return args[0];</td></tr><tr><td class="codekolom">4356</td><td class="codekolom">4417</td><td class="bredecode"> };</td></tr><tr><td class="codekolom">4357</td><td class="codekolom">4418</td><td class="bredecode"> }</td></tr><tr><td class="codekolom">4358</td><td class="codekolom">4419</td><td class="bredecode"> </td></tr><tr><td class="codekolom">4359</td><td class="codekolom">4420</td><td class="bredecode"> /**</td></tr><tr><td class="codekolom">4360</td><td class="codekolom">4421</td><td class="bredecode"> * Produces a callback bound to an optional `thisArg`. If `func` is a property</td></tr><tr><td class="codekolom">4361</td><td class="codekolom">4422</td><td class="bredecode"> * name, the created callback will return the property value for a given element.</td></tr><tr><td class="codekolom">4362</td><td class="codekolom">4423</td><td class="bredecode"> * If `func` is an object, the created callback will return `true` for elements</td></tr><tr><td class="codekolom">4363</td><td class="codekolom">4424</td><td class="bredecode"> * that contain the equivalent object properties, otherwise it will return `false`.</td></tr><tr><td class="codekolom">4364</td><td class="codekolom">4425</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">4365</td><td class="codekolom">4426</td><td class="bredecode"> * Note: All Lo-Dash methods, that accept a `callback` argument, use `_.createCallback`.</td></tr><tr><td class="codekolom">4366</td><td class="codekolom">4427</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">4367</td><td class="codekolom">4428</td><td class="bredecode"> * @static</td></tr><tr><td class="codekolom">4368</td><td class="codekolom">4429</td><td class="bredecode"> * @memberOf _</td></tr><tr><td class="codekolom">4369</td><td class="codekolom">4430</td><td class="bredecode"> * @category Functions</td></tr><tr><td class="codekolom">4370</td><td class="codekolom">4431</td><td class="bredecode"> * @param {Mixed} [func=identity] The value to convert to a callback.</td></tr><tr><td class="codekolom">4371</td><td class="codekolom">4432</td><td class="bredecode"> * @param {Mixed} [thisArg] The `this` binding of the created callback.</td></tr><tr><td class="codekolom">4372</td><td class="codekolom">4433</td><td class="bredecode"> * @param {Number} [argCount=3] The number of arguments the callback accepts.</td></tr><tr><td class="codekolom">4373</td><td class="codekolom">4434</td><td class="bredecode"> * @returns {Function} Returns a callback function.</td></tr><tr><td class="codekolom">4374</td><td class="codekolom">4435</td><td class="bredecode"> * @example</td></tr><tr><td class="codekolom">4375</td><td class="codekolom">4436</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">4376</td><td class="codekolom">4437</td><td class="bredecode"> * var stooges = [</td></tr><tr><td class="codekolom">4377</td><td class="codekolom">4438</td><td class="bredecode"> * { 'name': 'moe', 'age': 40 },</td></tr><tr><td class="codekolom">4378</td><td class="codekolom">4439</td><td class="bredecode"> * { 'name': 'larry', 'age': 50 }</td></tr><tr><td class="codekolom">4379</td><td class="codekolom">4440</td><td class="bredecode"> * ];</td></tr><tr><td class="codekolom">4380</td><td class="codekolom">4441</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">4381</td><td class="codekolom">4442</td><td class="bredecode"> * // wrap to create custom callback shorthands</td></tr><tr><td class="codekolom">4382</td><td class="codekolom">4443</td><td class="bredecode"> * _.createCallback = _.wrap(_.createCallback, function(func, callback, thisArg) {</td></tr><tr><td class="codekolom">4383</td><td class="codekolom">4444</td><td class="bredecode"> * var match = /^(.+?)__([gl]t)(.+)$/.exec(callback);</td></tr><tr><td class="codekolom">4384</td><td class="codekolom">4445</td><td class="bredecode"> * return !match ? func(callback, thisArg) : function(object) {</td></tr><tr><td class="codekolom">4385</td><td class="codekolom">4446</td><td class="bredecode"> * return match[2] == 'gt' ? object[match[1]] &gt; match[3] : object[match[1]] &lt; match[3];</td></tr><tr><td class="codekolom">4386</td><td class="codekolom">4447</td><td class="bredecode"> * };</td></tr><tr><td class="codekolom">4387</td><td class="codekolom">4448</td><td class="bredecode"> * });</td></tr><tr><td class="codekolom">4388</td><td class="codekolom">4449</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">4389</td><td class="codekolom">4450</td><td class="bredecode"> * _.filter(stooges, 'age__gt45');</td></tr><tr><td class="codekolom">4390</td><td class="codekolom">4451</td><td class="bredecode"> * // =&gt; [{ 'name': 'larry', 'age': 50 }]</td></tr><tr><td class="codekolom">4391</td><td class="codekolom">4452</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">4392</td><td class="codekolom">4453</td><td class="bredecode"> * // create mixins with support for "_.pluck" and "_.where" callback shorthands</td></tr><tr><td class="codekolom">4393</td><td class="codekolom">4454</td><td class="bredecode"> * _.mixin({</td></tr><tr><td class="codekolom">4394</td><td class="codekolom">4455</td><td class="bredecode"> * 'toLookup': function(collection, callback, thisArg) {</td></tr><tr><td class="codekolom">4395</td><td class="codekolom">4456</td><td class="bredecode"> * callback = _.createCallback(callback, thisArg);</td></tr><tr><td class="codekolom">4396</td><td class="codekolom">4457</td><td class="bredecode"> * return _.reduce(collection, function(result, value, index, collection) {</td></tr><tr><td class="codekolom">4397</td><td class="codekolom">4458</td><td class="bredecode"> * return (result[callback(value, index, collection)] = value, result);</td></tr><tr><td class="codekolom">4398</td><td class="codekolom">4459</td><td class="bredecode"> * }, {});</td></tr><tr><td class="codekolom">4399</td><td class="codekolom">4460</td><td class="bredecode"> * }</td></tr><tr><td class="codekolom">4400</td><td class="codekolom">4461</td><td class="bredecode"> * });</td></tr><tr><td class="codekolom">4401</td><td class="codekolom">4462</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">4402</td><td class="codekolom">4463</td><td class="bredecode"> * _.toLookup(stooges, 'name');</td></tr><tr><td class="codekolom">4403</td><td class="codekolom">4464</td><td class="bredecode"> * // =&gt; { 'moe': { 'name': 'moe', 'age': 40 }, 'larry': { 'name': 'larry', 'age': 50 } }</td></tr><tr><td class="codekolom">4404</td><td class="codekolom">4465</td><td class="bredecode"> */</td></tr><tr><td class="codekolom">4405</td><td class="codekolom">4466</td><td class="bredecode"> function createCallback(func, thisArg, argCount) {</td></tr><tr><td class="codekolom">4406</td><td class="codekolom">4467</td><td class="bredecode"> if (func == null) {</td></tr><tr><td class="codekolom">4407</td><td class="codekolom">4468</td><td class="bredecode"> return identity;</td></tr><tr><td class="codekolom">4408</td><td class="codekolom">4469</td><td class="bredecode"> }</td></tr><tr><td class="codekolom">4409</td><td class="codekolom">4470</td><td class="bredecode"> var type = typeof func;</td></tr><tr><td class="codekolom">4410</td><td class="codekolom">4471</td><td class="bredecode"> if (type != 'function') {</td></tr><tr><td class="codekolom">4411</td><td class="codekolom">4472</td><td class="bredecode"> if (type != 'object') {</td></tr><tr><td class="codekolom">4412</td><td class="codekolom">4473</td><td class="bredecode"> return function(object) {</td></tr><tr><td class="codekolom">4413</td><td class="codekolom">4474</td><td class="bredecode"> return object[func];</td></tr><tr><td class="codekolom">4414</td><td class="codekolom">4475</td><td class="bredecode"> };</td></tr><tr><td class="codekolom">4415</td><td class="codekolom">4476</td><td class="bredecode"> }</td></tr><tr><td class="codekolom">4416</td><td class="codekolom">4477</td><td class="bredecode"> var props = keys(func);</td></tr><tr><td class="codekolom">4417</td><td class="codekolom">4478</td><td class="bredecode"> return function(object) {</td></tr><tr><td class="codekolom">4418</td><td class="codekolom">4479</td><td class="bredecode"> var length = props.length,</td></tr><tr><td class="codekolom">4419</td><td class="codekolom">4480</td><td class="bredecode"> result = false;</td></tr><tr><td class="codekolom">4420</td><td class="codekolom">4481</td><td class="bredecode"> while (length--) {</td></tr><tr><td class="codekolom">4421</td><td class="codekolom">4482</td><td class="bredecode"> if (!(result = isEqual(object[props[length]], func[props[length]], indicatorObject))) {</td></tr><tr><td class="codekolom">4422</td><td class="codekolom">4483</td><td class="bredecode"> break;</td></tr><tr><td class="codekolom">4423</td><td class="codekolom">4484</td><td class="bredecode"> }</td></tr><tr><td class="codekolom">4424</td><td class="codekolom">4485</td><td class="bredecode"> }</td></tr><tr><td class="codekolom">4425</td><td class="codekolom">4486</td><td class="bredecode"> return result;</td></tr><tr><td class="codekolom">4426</td><td class="codekolom">4487</td><td class="bredecode"> };</td></tr><tr><td class="codekolom">4427</td><td class="codekolom">4488</td><td class="bredecode"> }</td></tr><tr><td class="codekolom">4428</td><td class="codekolom">4489</td><td class="bredecode"> if (typeof thisArg == 'undefined' || (reThis &amp;&amp; !reThis.test(fnToString.call(func)))) {</td></tr><tr><td class="codekolom">4429</td><td class="codekolom">4490</td><td class="bredecode"> return func;</td></tr><tr><td class="codekolom">4430</td><td class="codekolom">4491</td><td class="bredecode"> }</td></tr><tr><td class="codekolom">4431</td><td class="codekolom">4492</td><td class="bredecode"> if (argCount === 1) {</td></tr><tr><td class="codekolom">4432</td><td class="codekolom">4493</td><td class="bredecode"> return function(value) {</td></tr><tr><td class="codekolom">4433</td><td class="codekolom">4494</td><td class="bredecode"> return func.call(thisArg, value);</td></tr><tr><td class="codekolom">4434</td><td class="codekolom">4495</td><td class="bredecode"> };</td></tr><tr><td class="codekolom">4435</td><td class="codekolom">4496</td><td class="bredecode"> }</td></tr><tr><td class="codekolom">4436</td><td class="codekolom">4497</td><td class="bredecode"> if (argCount === 2) {</td></tr><tr><td class="codekolom">4437</td><td class="codekolom">4498</td><td class="bredecode"> return function(a, b) {</td></tr><tr><td class="codekolom">4438</td><td class="codekolom">4499</td><td class="bredecode"> return func.call(thisArg, a, b);</td></tr><tr><td class="codekolom">4439</td><td class="codekolom">4500</td><td class="bredecode"> };</td></tr><tr><td class="codekolom">4440</td><td class="codekolom">4501</td><td class="bredecode"> }</td></tr><tr><td class="codekolom">4441</td><td class="codekolom">4502</td><td class="bredecode"> if (argCount === 4) {</td></tr><tr><td class="codekolom">4442</td><td class="codekolom">4503</td><td class="bredecode"> return function(accumulator, value, index, collection) {</td></tr><tr><td class="codekolom">4443</td><td class="codekolom">4504</td><td class="bredecode"> return func.call(thisArg, accumulator, value, index, collection);</td></tr><tr><td class="codekolom">4444</td><td class="codekolom">4505</td><td class="bredecode"> };</td></tr><tr><td class="codekolom">4445</td><td class="codekolom">4506</td><td class="bredecode"> }</td></tr><tr><td class="codekolom">4446</td><td class="codekolom">4507</td><td class="bredecode"> return function(value, index, collection) {</td></tr><tr><td class="codekolom">4447</td><td class="codekolom">4508</td><td class="bredecode"> return func.call(thisArg, value, index, collection);</td></tr><tr><td class="codekolom">4448</td><td class="codekolom">4509</td><td class="bredecode"> };</td></tr><tr><td class="codekolom">4449</td><td class="codekolom">4510</td><td class="bredecode"> }</td></tr><tr><td class="codekolom">4450</td><td class="codekolom">4511</td><td class="bredecode"> </td></tr><tr><td class="codekolom">4451</td><td class="codekolom">4512</td><td class="bredecode"> /**</td></tr><tr><td class="codekolom">4452</td><td class="codekolom">4513</td><td class="bredecode"> * Creates a function that will delay the execution of `func` until after</td></tr><tr><td class="codekolom">4453</td><td class="codekolom">4514</td><td class="bredecode"> * `wait` milliseconds have elapsed since the last time it was invoked. Pass</td></tr><tr><td class="codekolom">4454</td><td class="codekolom">4515</td><td class="bredecode"> * an `options` object to indicate that `func` should be invoked on the leading</td></tr><tr><td class="codekolom">4455</td><td class="codekolom">4516</td><td class="bredecode"> * and/or trailing edge of the `wait` timeout. Subsequent calls to the debounced</td></tr><tr><td class="codekolom">4456</td><td class="codekolom">4517</td><td class="bredecode"> * function will return the result of the last `func` call.</td></tr><tr><td class="codekolom">4457</td><td class="codekolom">4518</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">4458</td><td class="codekolom">4519</td><td class="bredecode"> * Note: If `leading` and `trailing` options are `true`, `func` will be called</td></tr><tr><td class="codekolom">4459</td><td class="codekolom">4520</td><td class="bredecode"> * on the trailing edge of the timeout only if the the debounced function is</td></tr><tr><td class="codekolom">4460</td><td class="codekolom">4521</td><td class="bredecode"> * invoked more than once during the `wait` timeout.</td></tr><tr><td class="codekolom">4461</td><td class="codekolom">4522</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">4462</td><td class="codekolom">4523</td><td class="bredecode"> * @static</td></tr><tr><td class="codekolom">4463</td><td class="codekolom">4524</td><td class="bredecode"> * @memberOf _</td></tr><tr><td class="codekolom">4464</td><td class="codekolom">4525</td><td class="bredecode"> * @category Functions</td></tr><tr><td class="codekolom">4465</td><td class="codekolom">4526</td><td class="bredecode"> * @param {Function} func The function to debounce.</td></tr><tr><td class="codekolom">4466</td><td class="codekolom">4527</td><td class="bredecode"> * @param {Number} wait The number of milliseconds to delay.</td></tr><tr><td class="codekolom">4467</td><td class="codekolom">4528</td><td class="bredecode"> * @param {Object} options The options object.</td></tr><tr><td class="codekolom">4468</td><td class="codekolom">4529</td><td class="bredecode"> * [leading=false] A boolean to specify execution on the leading edge of the timeout.</td></tr><tr><td class="codekolom">4469</td><td class="codekolom">4530</td><td class="bredecode"> * [maxWait] The maximum time `func` is allowed to be delayed before it's called.</td></tr><tr><td class="codekolom">4470</td><td class="codekolom">4531</td><td class="bredecode"> * [trailing=true] A boolean to specify execution on the trailing edge of the timeout.</td></tr><tr><td class="codekolom">4471</td><td class="codekolom">4532</td><td class="bredecode"> * @returns {Function} Returns the new debounced function.</td></tr><tr><td class="codekolom">4472</td><td class="codekolom">4533</td><td class="bredecode"> * @example</td></tr><tr><td class="codekolom">4473</td><td class="codekolom">4534</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">4474</td><td class="codekolom">4535</td><td class="bredecode"> * var lazyLayout = _.debounce(calculateLayout, 300);</td></tr><tr><td class="codekolom">4475</td><td class="codekolom">4536</td><td class="bredecode"> * jQuery(window).on('resize', lazyLayout);</td></tr><tr><td class="codekolom">4476</td><td class="codekolom">4537</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">4477</td><td class="codekolom">4538</td><td class="bredecode"> * jQuery('#postbox').on('click', _.debounce(sendMail, 200, {</td></tr><tr><td class="codekolom">4478</td><td class="codekolom">4539</td><td class="bredecode"> * 'leading': true,</td></tr><tr><td class="codekolom">4479</td><td class="codekolom">4540</td><td class="bredecode"> * 'trailing': false</td></tr><tr><td class="codekolom">4480</td><td class="codekolom">4541</td><td class="bredecode"> * });</td></tr><tr><td class="codekolom">4481</td><td class="codekolom">4542</td><td class="bredecode"> */</td></tr><tr><td class="codekolom">4482</td><td class="codekolom">4543</td><td class="bredecode"> function debounce(func, wait, options) {</td></tr><tr><td class="codekolom">4483</td><td class="codekolom">4544</td><td class="bredecode"> var args,</td></tr><tr><td class="codekolom">4484</td><td class="codekolom">4545</td><td class="bredecode"> result,</td></tr><tr><td class="codekolom">4485</td><td class="codekolom">4546</td><td class="bredecode"> thisArg,</td></tr><tr><td class="codekolom">4486</td><td class="codekolom">4547</td><td class="bredecode"> callCount = 0,</td></tr><tr><td class="codekolom">4487</td><td class="codekolom">4548</td><td class="bredecode"> lastCalled = 0,</td></tr><tr><td class="codekolom">4488</td><td class="codekolom">4549</td><td class="bredecode"> maxWait = false,</td></tr><tr><td class="codekolom">4489</td><td class="codekolom">4550</td><td class="bredecode"> maxTimeoutId = null,</td></tr><tr><td class="codekolom">4490</td><td class="codekolom">4551</td><td class="bredecode"> timeoutId = null,</td></tr><tr><td class="codekolom">4491</td><td class="codekolom">4552</td><td class="bredecode"> trailing = true;</td></tr><tr><td class="codekolom">4492</td><td class="codekolom">4553</td><td class="bredecode"> </td></tr><tr><td class="codekolom">4493</td><td class="codekolom">4554</td><td class="bredecode"> function clear() {</td></tr><tr><td class="codekolom">4494</td><td class="codekolom">4555</td><td class="bredecode"> clearTimeout(maxTimeoutId);</td></tr><tr><td class="codekolom">4495</td><td class="codekolom">4556</td><td class="bredecode"> clearTimeout(timeoutId);</td></tr><tr><td class="codekolom">4496</td><td class="codekolom">4557</td><td class="bredecode"> callCount = 0;</td></tr><tr><td class="codekolom">4497</td><td class="codekolom">4558</td><td class="bredecode"> maxTimeoutId = timeoutId = null;</td></tr><tr><td class="codekolom">4498</td><td class="codekolom">4559</td><td class="bredecode"> }</td></tr><tr><td class="codekolom">4499</td><td class="codekolom">4560</td><td class="bredecode"> </td></tr><tr><td class="codekolom">4500</td><td class="codekolom">4561</td><td class="bredecode"> function delayed() {</td></tr><tr><td class="codekolom">4501</td><td class="codekolom">4562</td><td class="bredecode"> var isCalled = trailing &amp;&amp; (!leading || callCount &gt; 1);</td></tr><tr><td class="codekolom">4502</td><td class="codekolom">4563</td><td class="bredecode"> clear();</td></tr><tr><td class="codekolom">4503</td><td class="codekolom">4564</td><td class="bredecode"> if (isCalled) {</td></tr><tr><td class="codekolom">4504</td><td class="codekolom">4565</td><td class="bredecode"> if (maxWait !== false) {</td></tr><tr><td class="codekolom">4505</td><td class="codekolom">4566</td><td class="bredecode"> lastCalled = new Date;</td></tr><tr><td class="codekolom">4506</td><td class="codekolom">4567</td><td class="bredecode"> }</td></tr><tr><td class="codekolom">4507</td><td class="codekolom">4568</td><td class="bredecode"> result = func.apply(thisArg, args);</td></tr><tr><td class="codekolom">4508</td><td class="codekolom">4569</td><td class="bredecode"> }</td></tr><tr><td class="codekolom">4509</td><td class="codekolom">4570</td><td class="bredecode"> }</td></tr><tr><td class="codekolom">4510</td><td class="codekolom">4571</td><td class="bredecode"> </td></tr><tr><td class="codekolom">4511</td><td class="codekolom">4572</td><td class="bredecode"> function maxDelayed() {</td></tr><tr><td class="codekolom">4512</td><td class="codekolom">4573</td><td class="bredecode"> clear();</td></tr><tr><td class="codekolom">4513</td><td class="codekolom">4574</td><td class="bredecode"> if (trailing || (maxWait !== wait)) {</td></tr><tr><td class="codekolom">4514</td><td class="codekolom">4575</td><td class="bredecode"> lastCalled = new Date;</td></tr><tr><td class="codekolom">4515</td><td class="codekolom">4576</td><td class="bredecode"> result = func.apply(thisArg, args);</td></tr><tr><td class="codekolom">4516</td><td class="codekolom">4577</td><td class="bredecode"> }</td></tr><tr><td class="codekolom">4517</td><td class="codekolom">4578</td><td class="bredecode"> }</td></tr><tr><td class="codekolom">4518</td><td class="codekolom">4579</td><td class="bredecode"> </td></tr><tr><td class="codekolom">4519</td><td class="codekolom">4580</td><td class="bredecode"> wait = nativeMax(0, wait || 0);</td></tr><tr><td class="codekolom">4520</td><td class="codekolom">4581</td><td class="bredecode"> if (options === true) {</td></tr><tr><td class="codekolom">4521</td><td class="codekolom">4582</td><td class="bredecode"> var leading = true;</td></tr><tr><td class="codekolom">4522</td><td class="codekolom">4583</td><td class="bredecode"> trailing = false;</td></tr><tr><td class="codekolom">4523</td><td class="codekolom">4584</td><td class="bredecode"> } else if (isObject(options)) {</td></tr><tr><td class="codekolom">4524</td><td class="codekolom">4585</td><td class="bredecode"> leading = options.leading;</td></tr><tr><td class="codekolom">4525</td><td class="codekolom">4586</td><td class="bredecode"> maxWait = 'maxWait' in options &amp;&amp; nativeMax(wait, options.maxWait || 0);</td></tr><tr><td class="codekolom">4526</td><td class="codekolom">4587</td><td class="bredecode"> trailing = 'trailing' in options ? options.trailing : trailing;</td></tr><tr><td class="codekolom">4527</td><td class="codekolom">4588</td><td class="bredecode"> }</td></tr><tr><td class="codekolom">4528</td><td class="codekolom">4589</td><td class="bredecode"> return function() {</td></tr><tr><td class="codekolom">4529</td><td class="codekolom">4590</td><td class="bredecode"> args = arguments;</td></tr><tr><td class="codekolom">4530</td><td class="codekolom">4591</td><td class="bredecode"> thisArg = this;</td></tr><tr><td class="codekolom">4531</td><td class="codekolom">4592</td><td class="bredecode"> callCount++;</td></tr><tr><td class="codekolom">4532</td><td class="codekolom">4593</td><td class="bredecode"> </td></tr><tr><td class="codekolom">4533</td><td class="codekolom">4594</td><td class="bredecode"> // avoid issues with Titanium and `undefined` timeout ids</td></tr><tr><td class="codekolom">4534</td><td class="codekolom">4595</td><td class="bredecode"> // https://github.com/appcelerator/titanium_mobile/blob/3_1_0_GA/android/titanium/src/java/ti/modules/titanium/TitaniumModule.java#L185-L192</td></tr><tr><td class="codekolom">4535</td><td class="codekolom">4596</td><td class="bredecode"> clearTimeout(timeoutId);</td></tr><tr><td class="codekolom">4536</td><td class="codekolom">4597</td><td class="bredecode"> </td></tr><tr><td class="codekolom">4537</td><td class="codekolom">4598</td><td class="bredecode"> if (maxWait === false) {</td></tr><tr><td class="codekolom">4538</td><td class="codekolom">4599</td><td class="bredecode"> if (leading &amp;&amp; callCount &lt; 2) {</td></tr><tr><td class="codekolom">4539</td><td class="codekolom">4600</td><td class="bredecode"> result = func.apply(thisArg, args);</td></tr><tr><td class="codekolom">4540</td><td class="codekolom">4601</td><td class="bredecode"> }</td></tr><tr><td class="codekolom">4541</td><td class="codekolom">4602</td><td class="bredecode"> } else {</td></tr><tr><td class="codekolom">4542</td><td class="codekolom">4603</td><td class="bredecode"> var now = new Date;</td></tr><tr><td class="codekolom">4543</td><td class="codekolom">4604</td><td class="bredecode"> if (!maxTimeoutId &amp;&amp; !leading) {</td></tr><tr><td class="codekolom">4544</td><td class="codekolom">4605</td><td class="bredecode"> lastCalled = now;</td></tr><tr><td class="codekolom">4545</td><td class="codekolom">4606</td><td class="bredecode"> }</td></tr><tr><td class="codekolom">4546</td><td class="codekolom">4607</td><td class="bredecode"> var remaining = maxWait - (now - lastCalled);</td></tr><tr><td class="codekolom">4547</td><td class="codekolom">4608</td><td class="bredecode"> if (remaining &lt;= 0) {</td></tr><tr><td class="codekolom">4548</td><td class="codekolom">4609</td><td class="bredecode"> clearTimeout(maxTimeoutId);</td></tr><tr><td class="codekolom">4549</td><td class="codekolom">4610</td><td class="bredecode"> maxTimeoutId = null;</td></tr><tr><td class="codekolom">4550</td><td class="codekolom">4611</td><td class="bredecode"> lastCalled = now;</td></tr><tr><td class="codekolom">4551</td><td class="codekolom">4612</td><td class="bredecode"> result = func.apply(thisArg, args);</td></tr><tr><td class="codekolom">4552</td><td class="codekolom">4613</td><td class="bredecode"> }</td></tr><tr><td class="codekolom">4553</td><td class="codekolom">4614</td><td class="bredecode"> else if (!maxTimeoutId) {</td></tr><tr><td class="codekolom">4554</td><td class="codekolom">4615</td><td class="bredecode"> maxTimeoutId = setTimeout(maxDelayed, remaining);</td></tr><tr><td class="codekolom">4555</td><td class="codekolom">4616</td><td class="bredecode"> }</td></tr><tr><td class="codekolom">4556</td><td class="codekolom">4617</td><td class="bredecode"> }</td></tr><tr><td class="codekolom">4557</td><td class="codekolom">4618</td><td class="bredecode"> if (wait !== maxWait) {</td></tr><tr><td class="codekolom">4558</td><td class="codekolom">4619</td><td class="bredecode"> timeoutId = setTimeout(delayed, wait);</td></tr><tr><td class="codekolom">4559</td><td class="codekolom">4620</td><td class="bredecode"> }</td></tr><tr><td class="codekolom">4560</td><td class="codekolom">4621</td><td class="bredecode"> return result;</td></tr><tr><td class="codekolom">4561</td><td class="codekolom">4622</td><td class="bredecode"> };</td></tr><tr><td class="codekolom">4562</td><td class="codekolom">4623</td><td class="bredecode"> }</td></tr><tr><td class="codekolom">4563</td><td class="codekolom">4624</td><td class="bredecode"> </td></tr><tr><td class="codekolom">4564</td><td class="codekolom">4625</td><td class="bredecode"> /**</td></tr><tr><td class="codekolom">4565</td><td class="codekolom">4626</td><td class="bredecode"> * Defers executing the `func` function until the current call stack has cleared.</td></tr><tr><td class="codekolom">4566</td><td class="codekolom">4627</td><td class="bredecode"> * Additional arguments will be passed to `func` when it is invoked.</td></tr><tr><td class="codekolom">4567</td><td class="codekolom">4628</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">4568</td><td class="codekolom">4629</td><td class="bredecode"> * @static</td></tr><tr><td class="codekolom">4569</td><td class="codekolom">4630</td><td class="bredecode"> * @memberOf _</td></tr><tr><td class="codekolom">4570</td><td class="codekolom">4631</td><td class="bredecode"> * @category Functions</td></tr><tr><td class="codekolom">4571</td><td class="codekolom">4632</td><td class="bredecode"> * @param {Function} func The function to defer.</td></tr><tr><td class="codekolom">4572</td><td class="codekolom">4633</td><td class="bredecode"> * @param {Mixed} [arg1, arg2, ...] Arguments to invoke the function with.</td></tr><tr><td class="codekolom">4573</td><td class="codekolom">4634</td><td class="bredecode"> * @returns {Number} Returns the timer id.</td></tr><tr><td class="codekolom">4574</td><td class="codekolom">4635</td><td class="bredecode"> * @example</td></tr><tr><td class="codekolom">4575</td><td class="codekolom">4636</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">4576</td><td class="codekolom">4637</td><td class="bredecode"> * _.defer(function() { alert('deferred'); });</td></tr><tr><td class="codekolom">4577</td><td class="codekolom">4638</td><td class="bredecode"> * // returns from the function before `alert` is called</td></tr><tr><td class="codekolom">4578</td><td class="codekolom">4639</td><td class="bredecode"> */</td></tr><tr><td class="codekolom">4579</td><td class="codekolom">4640</td><td class="bredecode"> function defer(func) {</td></tr><tr><td class="codekolom">4580</td><td class="codekolom">4641</td><td class="bredecode"> var args = nativeSlice.call(arguments, 1);</td></tr><tr><td class="codekolom">4581</td><td class="codekolom">4642</td><td class="bredecode"> return setTimeout(function() { func.apply(undefined, args); }, 1);</td></tr><tr><td class="codekolom">4582</td><td class="codekolom">4643</td><td class="bredecode"> }</td></tr><tr><td class="codekolom">4583</td><td class="codekolom">4644</td><td class="bredecode"> // use `setImmediate` if it's available in Node.js</td></tr><tr><td class="codekolom">4584</td><td class="codekolom">4645</td><td class="bredecode"> if (isV8 &amp;&amp; freeModule &amp;&amp; typeof setImmediate == 'function') {</td></tr><tr><td class="codekolom">4585</td><td class="codekolom">4646</td><td class="bredecode"> defer = bind(setImmediate, context);</td></tr><tr><td class="codekolom">4586</td><td class="codekolom">4647</td><td class="bredecode"> }</td></tr><tr><td class="codekolom">4587</td><td class="codekolom">4648</td><td class="bredecode"> </td></tr><tr><td class="codekolom">4588</td><td class="codekolom">4649</td><td class="bredecode"> /**</td></tr><tr><td class="codekolom">4589</td><td class="codekolom">4650</td><td class="bredecode"> * Executes the `func` function after `wait` milliseconds. Additional arguments</td></tr><tr><td class="codekolom">4590</td><td class="codekolom">4651</td><td class="bredecode"> * will be passed to `func` when it is invoked.</td></tr><tr><td class="codekolom">4591</td><td class="codekolom">4652</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">4592</td><td class="codekolom">4653</td><td class="bredecode"> * @static</td></tr><tr><td class="codekolom">4593</td><td class="codekolom">4654</td><td class="bredecode"> * @memberOf _</td></tr><tr><td class="codekolom">4594</td><td class="codekolom">4655</td><td class="bredecode"> * @category Functions</td></tr><tr><td class="codekolom">4595</td><td class="codekolom">4656</td><td class="bredecode"> * @param {Function} func The function to delay.</td></tr><tr><td class="codekolom">4596</td><td class="codekolom">4657</td><td class="bredecode"> * @param {Number} wait The number of milliseconds to delay execution.</td></tr><tr><td class="codekolom">4597</td><td class="codekolom">4658</td><td class="bredecode"> * @param {Mixed} [arg1, arg2, ...] Arguments to invoke the function with.</td></tr><tr><td class="codekolom">4598</td><td class="codekolom">4659</td><td class="bredecode"> * @returns {Number} Returns the timer id.</td></tr><tr><td class="codekolom">4599</td><td class="codekolom">4660</td><td class="bredecode"> * @example</td></tr><tr><td class="codekolom">4600</td><td class="codekolom">4661</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">4601</td><td class="codekolom">4662</td><td class="bredecode"> * var log = _.bind(console.log, console);</td></tr><tr><td class="codekolom">4602</td><td class="codekolom">4663</td><td class="bredecode"> * _.delay(log, 1000, 'logged later');</td></tr><tr><td class="codekolom">4603</td><td class="codekolom">4664</td><td class="bredecode"> * // =&gt; 'logged later' (Appears after one second.)</td></tr><tr><td class="codekolom">4604</td><td class="codekolom">4665</td><td class="bredecode"> */</td></tr><tr><td class="codekolom">4605</td><td class="codekolom">4666</td><td class="bredecode"> function delay(func, wait) {</td></tr><tr><td class="codekolom">4606</td><td class="codekolom">4667</td><td class="bredecode"> var args = nativeSlice.call(arguments, 2);</td></tr><tr><td class="codekolom">4607</td><td class="codekolom">4668</td><td class="bredecode"> return setTimeout(function() { func.apply(undefined, args); }, wait);</td></tr><tr><td class="codekolom">4608</td><td class="codekolom">4669</td><td class="bredecode"> }</td></tr><tr><td class="codekolom">4609</td><td class="codekolom">4670</td><td class="bredecode"> </td></tr><tr><td class="codekolom">4610</td><td class="codekolom">4671</td><td class="bredecode"> /**</td></tr><tr><td class="codekolom">4611</td><td class="codekolom">4672</td><td class="bredecode"> * Creates a function that memoizes the result of `func`. If `resolver` is</td></tr><tr><td class="codekolom">4612</td><td class="codekolom">4673</td><td class="bredecode"> * passed, it will be used to determine the cache key for storing the result</td></tr><tr><td class="codekolom">4613</td><td class="codekolom">4674</td><td class="bredecode"> * based on the arguments passed to the memoized function. By default, the first</td></tr><tr><td class="codekolom">4614</td><td class="codekolom">4675</td><td class="bredecode"> * argument passed to the memoized function is used as the cache key. The `func`</td></tr><tr><td class="codekolom">4615</td><td class="codekolom">4676</td><td class="bredecode"> * is executed with the `this` binding of the memoized function. The result</td></tr><tr><td class="codekolom">4616</td><td class="codekolom">4677</td><td class="bredecode"> * cache is exposed as the `cache` property on the memoized function.</td></tr><tr><td class="codekolom">4617</td><td class="codekolom">4678</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">4618</td><td class="codekolom">4679</td><td class="bredecode"> * @static</td></tr><tr><td class="codekolom">4619</td><td class="codekolom">4680</td><td class="bredecode"> * @memberOf _</td></tr><tr><td class="codekolom">4620</td><td class="codekolom">4681</td><td class="bredecode"> * @category Functions</td></tr><tr><td class="codekolom">4621</td><td class="codekolom">4682</td><td class="bredecode"> * @param {Function} func The function to have its output memoized.</td></tr><tr><td class="codekolom">4622</td><td class="codekolom">4683</td><td class="bredecode"> * @param {Function} [resolver] A function used to resolve the cache key.</td></tr><tr><td class="codekolom">4623</td><td class="codekolom">4684</td><td class="bredecode"> * @returns {Function} Returns the new memoizing function.</td></tr><tr><td class="codekolom">4624</td><td class="codekolom">4685</td><td class="bredecode"> * @example</td></tr><tr><td class="codekolom">4625</td><td class="codekolom">4686</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">4626</td><td class="codekolom">4687</td><td class="bredecode"> * var fibonacci = _.memoize(function(n) {</td></tr><tr><td class="codekolom">4627</td><td class="codekolom">4688</td><td class="bredecode"> * return n &lt; 2 ? n : fibonacci(n - 1) + fibonacci(n - 2);</td></tr><tr><td class="codekolom">4628</td><td class="codekolom">4689</td><td class="bredecode"> * });</td></tr><tr><td class="codekolom">4629</td><td class="codekolom">4690</td><td class="bredecode"> */</td></tr><tr><td class="codekolom">4630</td><td class="codekolom">4691</td><td class="bredecode"> function memoize(func, resolver) {</td></tr><tr><td class="codekolom">4631</td><td class="codekolom">4692</td><td class="bredecode"> function memoized() {</td></tr><tr><td class="codekolom">4632</td><td class="codekolom">4693</td><td class="bredecode"> var cache = memoized.cache,</td></tr><tr><td class="codekolom">4633</td><td class="codekolom">4694</td><td class="bredecode"> key = keyPrefix + (resolver ? resolver.apply(this, arguments) : arguments[0]);</td></tr><tr><td class="codekolom">4634</td><td class="codekolom">4695</td><td class="bredecode"> </td></tr><tr><td class="codekolom">4635</td><td class="codekolom">4696</td><td class="bredecode"> return hasOwnProperty.call(cache, key)</td></tr><tr><td class="codekolom">4636</td><td class="codekolom">4697</td><td class="bredecode"> ? cache[key]</td></tr><tr><td class="codekolom">4637</td><td class="codekolom">4698</td><td class="bredecode"> : (cache[key] = func.apply(this, arguments));</td></tr><tr><td class="codekolom">4638</td><td class="codekolom">4699</td><td class="bredecode"> }</td></tr><tr><td class="codekolom">4639</td><td class="codekolom">4700</td><td class="bredecode"> memoized.cache = {};</td></tr><tr><td class="codekolom">4640</td><td class="codekolom">4701</td><td class="bredecode"> return memoized;</td></tr><tr><td class="codekolom">4641</td><td class="codekolom">4702</td><td class="bredecode"> }</td></tr><tr><td class="codekolom">4642</td><td class="codekolom">4703</td><td class="bredecode"> </td></tr><tr><td class="codekolom">4643</td><td class="codekolom">4704</td><td class="bredecode"> /**</td></tr><tr><td class="codekolom">4644</td><td class="codekolom">4705</td><td class="bredecode"> * Creates a function that is restricted to execute `func` once. Repeat calls to</td></tr><tr><td class="codekolom">4645</td><td class="codekolom">4706</td><td class="bredecode"> * the function will return the value of the first call. The `func` is executed</td></tr><tr><td class="codekolom">4646</td><td class="codekolom">4707</td><td class="bredecode"> * with the `this` binding of the created function.</td></tr><tr><td class="codekolom">4647</td><td class="codekolom">4708</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">4648</td><td class="codekolom">4709</td><td class="bredecode"> * @static</td></tr><tr><td class="codekolom">4649</td><td class="codekolom">4710</td><td class="bredecode"> * @memberOf _</td></tr><tr><td class="codekolom">4650</td><td class="codekolom">4711</td><td class="bredecode"> * @category Functions</td></tr><tr><td class="codekolom">4651</td><td class="codekolom">4712</td><td class="bredecode"> * @param {Function} func The function to restrict.</td></tr><tr><td class="codekolom">4652</td><td class="codekolom">4713</td><td class="bredecode"> * @returns {Function} Returns the new restricted function.</td></tr><tr><td class="codekolom">4653</td><td class="codekolom">4714</td><td class="bredecode"> * @example</td></tr><tr><td class="codekolom">4654</td><td class="codekolom">4715</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">4655</td><td class="codekolom">4716</td><td class="bredecode"> * var initialize = _.once(createApplication);</td></tr><tr><td class="codekolom">4656</td><td class="codekolom">4717</td><td class="bredecode"> * initialize();</td></tr><tr><td class="codekolom">4657</td><td class="codekolom">4718</td><td class="bredecode"> * initialize();</td></tr><tr><td class="codekolom">4658</td><td class="codekolom">4719</td><td class="bredecode"> * // `initialize` executes `createApplication` once</td></tr><tr><td class="codekolom">4659</td><td class="codekolom">4720</td><td class="bredecode"> */</td></tr><tr><td class="codekolom">4660</td><td class="codekolom">4721</td><td class="bredecode"> function once(func) {</td></tr><tr><td class="codekolom">4661</td><td class="codekolom">4722</td><td class="bredecode"> var ran,</td></tr><tr><td class="codekolom">4662</td><td class="codekolom">4723</td><td class="bredecode"> result;</td></tr><tr><td class="codekolom">4663</td><td class="codekolom">4724</td><td class="bredecode"> </td></tr><tr><td class="codekolom">4664</td><td class="codekolom">4725</td><td class="bredecode"> return function() {</td></tr><tr><td class="codekolom">4665</td><td class="codekolom">4726</td><td class="bredecode"> if (ran) {</td></tr><tr><td class="codekolom">4666</td><td class="codekolom">4727</td><td class="bredecode"> return result;</td></tr><tr><td class="codekolom">4667</td><td class="codekolom">4728</td><td class="bredecode"> }</td></tr><tr><td class="codekolom">4668</td><td class="codekolom">4729</td><td class="bredecode"> ran = true;</td></tr><tr><td class="codekolom">4669</td><td class="codekolom">4730</td><td class="bredecode"> result = func.apply(this, arguments);</td></tr><tr><td class="codekolom">4670</td><td class="codekolom">4731</td><td class="bredecode"> </td></tr><tr><td class="codekolom">4671</td><td class="codekolom">4732</td><td class="bredecode"> // clear the `func` variable so the function may be garbage collected</td></tr><tr><td class="codekolom">4672</td><td class="codekolom">4733</td><td class="bredecode"> func = null;</td></tr><tr><td class="codekolom">4673</td><td class="codekolom">4734</td><td class="bredecode"> return result;</td></tr><tr><td class="codekolom">4674</td><td class="codekolom">4735</td><td class="bredecode"> };</td></tr><tr><td class="codekolom">4675</td><td class="codekolom">4736</td><td class="bredecode"> }</td></tr><tr><td class="codekolom">4676</td><td class="codekolom">4737</td><td class="bredecode"> </td></tr><tr><td class="codekolom">4677</td><td class="codekolom">4738</td><td class="bredecode"> /**</td></tr><tr><td class="codekolom">4678</td><td class="codekolom">4739</td><td class="bredecode"> * Creates a function that, when called, invokes `func` with any additional</td></tr><tr><td class="codekolom">4679</td><td class="codekolom">4740</td><td class="bredecode"> * `partial` arguments prepended to those passed to the new function. This</td></tr><tr><td class="codekolom">4680</td><td class="codekolom">4741</td><td class="bredecode"> * method is similar to `_.bind`, except it does **not** alter the `this` binding.</td></tr><tr><td class="codekolom">4681</td><td class="codekolom">4742</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">4682</td><td class="codekolom">4743</td><td class="bredecode"> * @static</td></tr><tr><td class="codekolom">4683</td><td class="codekolom">4744</td><td class="bredecode"> * @memberOf _</td></tr><tr><td class="codekolom">4684</td><td class="codekolom">4745</td><td class="bredecode"> * @category Functions</td></tr><tr><td class="codekolom">4685</td><td class="codekolom">4746</td><td class="bredecode"> * @param {Function} func The function to partially apply arguments to.</td></tr><tr><td class="codekolom">4686</td><td class="codekolom">4747</td><td class="bredecode"> * @param {Mixed} [arg1, arg2, ...] Arguments to be partially applied.</td></tr><tr><td class="codekolom">4687</td><td class="codekolom">4748</td><td class="bredecode"> * @returns {Function} Returns the new partially applied function.</td></tr><tr><td class="codekolom">4688</td><td class="codekolom">4749</td><td class="bredecode"> * @example</td></tr><tr><td class="codekolom">4689</td><td class="codekolom">4750</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">4690</td><td class="codekolom">4751</td><td class="bredecode"> * var greet = function(greeting, name) { return greeting + ' ' + name; };</td></tr><tr><td class="codekolom">4691</td><td class="codekolom">4752</td><td class="bredecode"> * var hi = _.partial(greet, 'hi');</td></tr><tr><td class="codekolom">4692</td><td class="codekolom">4753</td><td class="bredecode"> * hi('moe');</td></tr><tr><td class="codekolom">4693</td><td class="codekolom">4754</td><td class="bredecode"> * // =&gt; 'hi moe'</td></tr><tr><td class="codekolom">4694</td><td class="codekolom">4755</td><td class="bredecode"> */</td></tr><tr><td class="codekolom">4695</td><td class="codekolom">4756</td><td class="bredecode"> function partial(func) {</td></tr><tr><td class="codekolom">4696</td><td class="codekolom">4757</td><td class="bredecode"> return createBound(func, nativeSlice.call(arguments, 1));</td></tr><tr><td class="codekolom">4697</td><td class="codekolom">4758</td><td class="bredecode"> }</td></tr><tr><td class="codekolom">4698</td><td class="codekolom">4759</td><td class="bredecode"> </td></tr><tr><td class="codekolom">4699</td><td class="codekolom">4760</td><td class="bredecode"> /**</td></tr><tr><td class="codekolom">4700</td><td class="codekolom">4761</td><td class="bredecode"> * This method is similar to `_.partial`, except that `partial` arguments are</td></tr><tr><td class="codekolom">4701</td><td class="codekolom">4762</td><td class="bredecode"> * appended to those passed to the new function.</td></tr><tr><td class="codekolom">4702</td><td class="codekolom">4763</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">4703</td><td class="codekolom">4764</td><td class="bredecode"> * @static</td></tr><tr><td class="codekolom">4704</td><td class="codekolom">4765</td><td class="bredecode"> * @memberOf _</td></tr><tr><td class="codekolom">4705</td><td class="codekolom">4766</td><td class="bredecode"> * @category Functions</td></tr><tr><td class="codekolom">4706</td><td class="codekolom">4767</td><td class="bredecode"> * @param {Function} func The function to partially apply arguments to.</td></tr><tr><td class="codekolom">4707</td><td class="codekolom">4768</td><td class="bredecode"> * @param {Mixed} [arg1, arg2, ...] Arguments to be partially applied.</td></tr><tr><td class="codekolom">4708</td><td class="codekolom">4769</td><td class="bredecode"> * @returns {Function} Returns the new partially applied function.</td></tr><tr><td class="codekolom">4709</td><td class="codekolom">4770</td><td class="bredecode"> * @example</td></tr><tr><td class="codekolom">4710</td><td class="codekolom">4771</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">4711</td><td class="codekolom">4772</td><td class="bredecode"> * var defaultsDeep = _.partialRight(_.merge, _.defaults);</td></tr><tr><td class="codekolom">4712</td><td class="codekolom">4773</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">4713</td><td class="codekolom">4774</td><td class="bredecode"> * var options = {</td></tr><tr><td class="codekolom">4714</td><td class="codekolom">4775</td><td class="bredecode"> * 'variable': 'data',</td></tr><tr><td class="codekolom">4715</td><td class="codekolom">4776</td><td class="bredecode"> * 'imports': { 'jq': $ }</td></tr><tr><td class="codekolom">4716</td><td class="codekolom">4777</td><td class="bredecode"> * };</td></tr><tr><td class="codekolom">4717</td><td class="codekolom">4778</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">4718</td><td class="codekolom">4779</td><td class="bredecode"> * defaultsDeep(options, _.templateSettings);</td></tr><tr><td class="codekolom">4719</td><td class="codekolom">4780</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">4720</td><td class="codekolom">4781</td><td class="bredecode"> * options.variable</td></tr><tr><td class="codekolom">4721</td><td class="codekolom">4782</td><td class="bredecode"> * // =&gt; 'data'</td></tr><tr><td class="codekolom">4722</td><td class="codekolom">4783</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">4723</td><td class="codekolom">4784</td><td class="bredecode"> * options.imports</td></tr><tr><td class="codekolom">4724</td><td class="codekolom">4785</td><td class="bredecode"> * // =&gt; { '_': _, 'jq': $ }</td></tr><tr><td class="codekolom">4725</td><td class="codekolom">4786</td><td class="bredecode"> */</td></tr><tr><td class="codekolom">4726</td><td class="codekolom">4787</td><td class="bredecode"> function partialRight(func) {</td></tr><tr><td class="codekolom">4727</td><td class="codekolom">4788</td><td class="bredecode"> return createBound(func, nativeSlice.call(arguments, 1), null, indicatorObject);</td></tr><tr><td class="codekolom">4728</td><td class="codekolom">4789</td><td class="bredecode"> }</td></tr><tr><td class="codekolom">4729</td><td class="codekolom">4790</td><td class="bredecode"> </td></tr><tr><td class="codekolom">4730</td><td class="codekolom">4791</td><td class="bredecode"> /**</td></tr><tr><td class="codekolom">4731</td><td class="codekolom">4792</td><td class="bredecode"> * Creates a function that, when executed, will only call the `func` function</td></tr><tr><td class="codekolom">4732</td><td class="codekolom">4793</td><td class="bredecode"> * at most once per every `wait` milliseconds. Pass an `options` object to</td></tr><tr><td class="codekolom">4733</td><td class="codekolom">4794</td><td class="bredecode"> * indicate that `func` should be invoked on the leading and/or trailing edge</td></tr><tr><td class="codekolom">4734</td><td class="codekolom">4795</td><td class="bredecode"> * of the `wait` timeout. Subsequent calls to the throttled function will</td></tr><tr><td class="codekolom">4735</td><td class="codekolom">4796</td><td class="bredecode"> * return the result of the last `func` call.</td></tr><tr><td class="codekolom">4736</td><td class="codekolom">4797</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">4737</td><td class="codekolom">4798</td><td class="bredecode"> * Note: If `leading` and `trailing` options are `true`, `func` will be called</td></tr><tr><td class="codekolom">4738</td><td class="codekolom">4799</td><td class="bredecode"> * on the trailing edge of the timeout only if the the throttled function is</td></tr><tr><td class="codekolom">4739</td><td class="codekolom">4800</td><td class="bredecode"> * invoked more than once during the `wait` timeout.</td></tr><tr><td class="codekolom">4740</td><td class="codekolom">4801</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">4741</td><td class="codekolom">4802</td><td class="bredecode"> * @static</td></tr><tr><td class="codekolom">4742</td><td class="codekolom">4803</td><td class="bredecode"> * @memberOf _</td></tr><tr><td class="codekolom">4743</td><td class="codekolom">4804</td><td class="bredecode"> * @category Functions</td></tr><tr><td class="codekolom">4744</td><td class="codekolom">4805</td><td class="bredecode"> * @param {Function} func The function to throttle.</td></tr><tr><td class="codekolom">4745</td><td class="codekolom">4806</td><td class="bredecode"> * @param {Number} wait The number of milliseconds to throttle executions to.</td></tr><tr><td class="codekolom">4746</td><td class="codekolom">4807</td><td class="bredecode"> * @param {Object} options The options object.</td></tr><tr><td class="codekolom">4747</td><td class="codekolom">4808</td><td class="bredecode"> * [leading=true] A boolean to specify execution on the leading edge of the timeout.</td></tr><tr><td class="codekolom">4748</td><td class="codekolom">4809</td><td class="bredecode"> * [trailing=true] A boolean to specify execution on the trailing edge of the timeout.</td></tr><tr><td class="codekolom">4749</td><td class="codekolom">4810</td><td class="bredecode"> * @returns {Function} Returns the new throttled function.</td></tr><tr><td class="codekolom">4750</td><td class="codekolom">4811</td><td class="bredecode"> * @example</td></tr><tr><td class="codekolom">4751</td><td class="codekolom">4812</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">4752</td><td class="codekolom">4813</td><td class="bredecode"> * var throttled = _.throttle(updatePosition, 100);</td></tr><tr><td class="codekolom">4753</td><td class="codekolom">4814</td><td class="bredecode"> * jQuery(window).on('scroll', throttled);</td></tr><tr><td class="codekolom">4754</td><td class="codekolom">4815</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">4755</td><td class="codekolom">4816</td><td class="bredecode"> * jQuery('.interactive').on('click', _.throttle(renewToken, 300000, {</td></tr><tr><td class="codekolom">4756</td><td class="codekolom">4817</td><td class="bredecode"> * 'trailing': false</td></tr><tr><td class="codekolom">4757</td><td class="codekolom">4818</td><td class="bredecode"> * }));</td></tr><tr><td class="codekolom">4758</td><td class="codekolom">4819</td><td class="bredecode"> */</td></tr><tr><td class="codekolom">4759</td><td class="codekolom">4820</td><td class="bredecode"> function throttle(func, wait, options) {</td></tr><tr><td class="codekolom">4760</td><td class="codekolom">4821</td><td class="bredecode"> var leading = true,</td></tr><tr><td class="codekolom">4761</td><td class="codekolom">4822</td><td class="bredecode"> trailing = true;</td></tr><tr><td class="codekolom">4762</td><td class="codekolom">4823</td><td class="bredecode"> </td></tr><tr><td class="codekolom">4763</td><td class="codekolom">4824</td><td class="bredecode"> if (options === false) {</td></tr><tr><td class="codekolom">4764</td><td class="codekolom">4825</td><td class="bredecode"> leading = false;</td></tr><tr><td class="codekolom">4765</td><td class="codekolom">4826</td><td class="bredecode"> } else if (isObject(options)) {</td></tr><tr><td class="codekolom">4766</td><td class="codekolom">4827</td><td class="bredecode"> leading = 'leading' in options ? options.leading : leading;</td></tr><tr><td class="codekolom">4767</td><td class="codekolom">4828</td><td class="bredecode"> trailing = 'trailing' in options ? options.trailing : trailing;</td></tr><tr><td class="codekolom">4768</td><td class="codekolom">4829</td><td class="bredecode"> }</td></tr><tr><td class="codekolom">4769</td><td class="codekolom">4830</td><td class="bredecode"> options = getObject();</td></tr><tr><td class="codekolom">4770</td><td class="codekolom">4831</td><td class="bredecode"> options.leading = leading;</td></tr><tr><td class="codekolom">4771</td><td class="codekolom">4832</td><td class="bredecode"> options.maxWait = wait;</td></tr><tr><td class="codekolom">4772</td><td class="codekolom">4833</td><td class="bredecode"> options.trailing = trailing;</td></tr><tr><td class="codekolom">4773</td><td class="codekolom">4834</td><td class="bredecode"> </td></tr><tr><td class="codekolom">4774</td><td class="codekolom">4835</td><td class="bredecode"> var result = debounce(func, wait, options);</td></tr><tr><td class="codekolom">4775</td><td class="codekolom">4836</td><td class="bredecode"> releaseObject(options);</td></tr><tr><td class="codekolom">4776</td><td class="codekolom">4837</td><td class="bredecode"> return result;</td></tr><tr><td class="codekolom">4777</td><td class="codekolom">4838</td><td class="bredecode"> }</td></tr><tr><td class="codekolom">4778</td><td class="codekolom">4839</td><td class="bredecode"> </td></tr><tr><td class="codekolom">4779</td><td class="codekolom">4840</td><td class="bredecode"> /**</td></tr><tr><td class="codekolom">4780</td><td class="codekolom">4841</td><td class="bredecode"> * Creates a function that passes `value` to the `wrapper` function as its</td></tr><tr><td class="codekolom">4781</td><td class="codekolom">4842</td><td class="bredecode"> * first argument. Additional arguments passed to the function are appended</td></tr><tr><td class="codekolom">4782</td><td class="codekolom">4843</td><td class="bredecode"> * to those passed to the `wrapper` function. The `wrapper` is executed with</td></tr><tr><td class="codekolom">4783</td><td class="codekolom">4844</td><td class="bredecode"> * the `this` binding of the created function.</td></tr><tr><td class="codekolom">4784</td><td class="codekolom">4845</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">4785</td><td class="codekolom">4846</td><td class="bredecode"> * @static</td></tr><tr><td class="codekolom">4786</td><td class="codekolom">4847</td><td class="bredecode"> * @memberOf _</td></tr><tr><td class="codekolom">4787</td><td class="codekolom">4848</td><td class="bredecode"> * @category Functions</td></tr><tr><td class="codekolom">4788</td><td class="codekolom">4849</td><td class="bredecode"> * @param {Mixed} value The value to wrap.</td></tr><tr><td class="codekolom">4789</td><td class="codekolom">4850</td><td class="bredecode"> * @param {Function} wrapper The wrapper function.</td></tr><tr><td class="codekolom">4790</td><td class="codekolom">4851</td><td class="bredecode"> * @returns {Function} Returns the new function.</td></tr><tr><td class="codekolom">4791</td><td class="codekolom">4852</td><td class="bredecode"> * @example</td></tr><tr><td class="codekolom">4792</td><td class="codekolom">4853</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">4793</td><td class="codekolom">4854</td><td class="bredecode"> * var hello = function(name) { return 'hello ' + name; };</td></tr><tr><td class="codekolom">4794</td><td class="codekolom">4855</td><td class="bredecode"> * hello = _.wrap(hello, function(func) {</td></tr><tr><td class="codekolom">4795</td><td class="codekolom">4856</td><td class="bredecode"> * return 'before, ' + func('moe') + ', after';</td></tr><tr><td class="codekolom">4796</td><td class="codekolom">4857</td><td class="bredecode"> * });</td></tr><tr><td class="codekolom">4797</td><td class="codekolom">4858</td><td class="bredecode"> * hello();</td></tr><tr><td class="codekolom">4798</td><td class="codekolom">4859</td><td class="bredecode"> * // =&gt; 'before, hello moe, after'</td></tr><tr><td class="codekolom">4799</td><td class="codekolom">4860</td><td class="bredecode"> */</td></tr><tr><td class="codekolom">4800</td><td class="codekolom">4861</td><td class="bredecode"> function wrap(value, wrapper) {</td></tr><tr><td class="codekolom">4801</td><td class="codekolom">4862</td><td class="bredecode"> return function() {</td></tr><tr><td class="codekolom">4802</td><td class="codekolom">4863</td><td class="bredecode"> var args = [value];</td></tr><tr><td class="codekolom">4803</td><td class="codekolom">4864</td><td class="bredecode"> push.apply(args, arguments);</td></tr><tr><td class="codekolom">4804</td><td class="codekolom">4865</td><td class="bredecode"> return wrapper.apply(this, args);</td></tr><tr><td class="codekolom">4805</td><td class="codekolom">4866</td><td class="bredecode"> };</td></tr><tr><td class="codekolom">4806</td><td class="codekolom">4867</td><td class="bredecode"> }</td></tr><tr><td class="codekolom">4807</td><td class="codekolom">4868</td><td class="bredecode"> </td></tr><tr><td class="codekolom">4808</td><td class="codekolom">4869</td><td class="bredecode"> /*--------------------------------------------------------------------------*/</td></tr><tr><td class="codekolom">4809</td><td class="codekolom">4870</td><td class="bredecode"> </td></tr><tr><td class="codekolom">4810</td><td class="codekolom">4871</td><td class="bredecode"> /**</td></tr><tr><td class="codekolom">4811</td><td class="codekolom">4872</td><td class="bredecode"> * Converts the characters `&amp;`, `&lt;`, `&gt;`, `"`, and `'` in `string` to their</td></tr><tr><td class="codekolom">4812</td><td class="codekolom">4873</td><td class="bredecode"> * corresponding HTML entities.</td></tr><tr><td class="codekolom">4813</td><td class="codekolom">4874</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">4814</td><td class="codekolom">4875</td><td class="bredecode"> * @static</td></tr><tr><td class="codekolom">4815</td><td class="codekolom">4876</td><td class="bredecode"> * @memberOf _</td></tr><tr><td class="codekolom">4816</td><td class="codekolom">4877</td><td class="bredecode"> * @category Utilities</td></tr><tr><td class="codekolom">4817</td><td class="codekolom">4878</td><td class="bredecode"> * @param {String} string The string to escape.</td></tr><tr><td class="codekolom">4818</td><td class="codekolom">4879</td><td class="bredecode"> * @returns {String} Returns the escaped string.</td></tr><tr><td class="codekolom">4819</td><td class="codekolom">4880</td><td class="bredecode"> * @example</td></tr><tr><td class="codekolom">4820</td><td class="codekolom">4881</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">4821</td><td class="codekolom">4882</td><td class="bredecode"> * _.escape('Moe, Larry &amp; Curly');</td></tr><tr><td class="codekolom">4822</td><td class="codekolom">4883</td><td class="bredecode"> * // =&gt; 'Moe, Larry &amp;amp; Curly'</td></tr><tr><td class="codekolom">4823</td><td class="codekolom">4884</td><td class="bredecode"> */</td></tr><tr><td class="codekolom">4824</td><td class="codekolom">4885</td><td class="bredecode"> function escape(string) {</td></tr><tr><td class="codekolom">4825</td><td class="codekolom">4886</td><td class="bredecode"> return string == null ? '' : String(string).replace(reUnescapedHtml, escapeHtmlChar);</td></tr><tr><td class="codekolom">4826</td><td class="codekolom">4887</td><td class="bredecode"> }</td></tr><tr><td class="codekolom">4827</td><td class="codekolom">4888</td><td class="bredecode"> </td></tr><tr><td class="codekolom">4828</td><td class="codekolom">4889</td><td class="bredecode"> /**</td></tr><tr><td class="codekolom">4829</td><td class="codekolom">4890</td><td class="bredecode"> * This method returns the first argument passed to it.</td></tr><tr><td class="codekolom">4830</td><td class="codekolom">4891</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">4831</td><td class="codekolom">4892</td><td class="bredecode"> * @static</td></tr><tr><td class="codekolom">4832</td><td class="codekolom">4893</td><td class="bredecode"> * @memberOf _</td></tr><tr><td class="codekolom">4833</td><td class="codekolom">4894</td><td class="bredecode"> * @category Utilities</td></tr><tr><td class="codekolom">4834</td><td class="codekolom">4895</td><td class="bredecode"> * @param {Mixed} value Any value.</td></tr><tr><td class="codekolom">4835</td><td class="codekolom">4896</td><td class="bredecode"> * @returns {Mixed} Returns `value`.</td></tr><tr><td class="codekolom">4836</td><td class="codekolom">4897</td><td class="bredecode"> * @example</td></tr><tr><td class="codekolom">4837</td><td class="codekolom">4898</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">4838</td><td class="codekolom">4899</td><td class="bredecode"> * var moe = { 'name': 'moe' };</td></tr><tr><td class="codekolom">4839</td><td class="codekolom">4900</td><td class="bredecode"> * moe === _.identity(moe);</td></tr><tr><td class="codekolom">4840</td><td class="codekolom">4901</td><td class="bredecode"> * // =&gt; true</td></tr><tr><td class="codekolom">4841</td><td class="codekolom">4902</td><td class="bredecode"> */</td></tr><tr><td class="codekolom">4842</td><td class="codekolom">4903</td><td class="bredecode"> function identity(value) {</td></tr><tr><td class="codekolom">4843</td><td class="codekolom">4904</td><td class="bredecode"> return value;</td></tr><tr><td class="codekolom">4844</td><td class="codekolom">4905</td><td class="bredecode"> }</td></tr><tr><td class="codekolom">4845</td><td class="codekolom">4906</td><td class="bredecode"> </td></tr><tr><td class="codekolom">4846</td><td class="codekolom">4907</td><td class="bredecode"> /**</td></tr><tr><td class="codekolom">4847</td><td class="codekolom">4908</td><td class="bredecode"> * Adds functions properties of `object` to the `lodash` function and chainable</td></tr><tr><td class="codekolom">4848</td><td class="codekolom">4909</td><td class="bredecode"> * wrapper.</td></tr><tr><td class="codekolom">4849</td><td class="codekolom">4910</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">4850</td><td class="codekolom">4911</td><td class="bredecode"> * @static</td></tr><tr><td class="codekolom">4851</td><td class="codekolom">4912</td><td class="bredecode"> * @memberOf _</td></tr><tr><td class="codekolom">4852</td><td class="codekolom">4913</td><td class="bredecode"> * @category Utilities</td></tr><tr><td class="codekolom">4853</td><td class="codekolom">4914</td><td class="bredecode"> * @param {Object} object The object of function properties to add to `lodash`.</td></tr><tr><td class="codekolom">4854</td><td class="codekolom">4915</td><td class="bredecode"> * @example</td></tr><tr><td class="codekolom">4855</td><td class="codekolom">4916</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">4856</td><td class="codekolom">4917</td><td class="bredecode"> * _.mixin({</td></tr><tr><td class="codekolom">4857</td><td class="codekolom">4918</td><td class="bredecode"> * 'capitalize': function(string) {</td></tr><tr><td class="codekolom">4858</td><td class="codekolom">4919</td><td class="bredecode"> * return string.charAt(0).toUpperCase() + string.slice(1).toLowerCase();</td></tr><tr><td class="codekolom">4859</td><td class="codekolom">4920</td><td class="bredecode"> * }</td></tr><tr><td class="codekolom">4860</td><td class="codekolom">4921</td><td class="bredecode"> * });</td></tr><tr><td class="codekolom">4861</td><td class="codekolom">4922</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">4862</td><td class="codekolom">4923</td><td class="bredecode"> * _.capitalize('moe');</td></tr><tr><td class="codekolom">4863</td><td class="codekolom">4924</td><td class="bredecode"> * // =&gt; 'Moe'</td></tr><tr><td class="codekolom">4864</td><td class="codekolom">4925</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">4865</td><td class="codekolom">4926</td><td class="bredecode"> * _('moe').capitalize();</td></tr><tr><td class="codekolom">4866</td><td class="codekolom">4927</td><td class="bredecode"> * // =&gt; 'Moe'</td></tr><tr><td class="codekolom">4867</td><td class="codekolom">4928</td><td class="bredecode"> */</td></tr><tr><td class="codekolom">4868</td><td class="codekolom">4929</td><td class="bredecode"> function mixin(object) {</td></tr><tr class="del"><td class="codekolom">4869</td><td class="codekolom"></td><td class="bredecode">- forEach(functions(object), function(methodName) {</td></tr><tr class="add"><td class="codekolom"></td><td class="codekolom">4930</td><td class="bredecode">+ forEach(function(methodName) {</td></tr><tr><td class="codekolom">4870</td><td class="codekolom">4931</td><td class="bredecode"> var func = lodash[methodName] = object[methodName];</td></tr><tr><td class="codekolom">4871</td><td class="codekolom">4932</td><td class="bredecode"> </td></tr><tr><td class="codekolom">4872</td><td class="codekolom">4933</td><td class="bredecode"> lodash.prototype[methodName] = function() {</td></tr><tr><td class="codekolom">4873</td><td class="codekolom">4934</td><td class="bredecode"> var value = this.__wrapped__,</td></tr><tr><td class="codekolom">4874</td><td class="codekolom">4935</td><td class="bredecode"> args = [value];</td></tr><tr><td class="codekolom">4875</td><td class="codekolom">4936</td><td class="bredecode"> </td></tr><tr><td class="codekolom">4876</td><td class="codekolom">4937</td><td class="bredecode"> push.apply(args, arguments);</td></tr><tr><td class="codekolom">4877</td><td class="codekolom">4938</td><td class="bredecode"> var result = func.apply(lodash, args);</td></tr><tr><td class="codekolom">4878</td><td class="codekolom">4939</td><td class="bredecode"> return (value &amp;&amp; typeof value == 'object' &amp;&amp; value === result)</td></tr><tr><td class="codekolom">4879</td><td class="codekolom">4940</td><td class="bredecode"> ? this</td></tr><tr><td class="codekolom">4880</td><td class="codekolom">4941</td><td class="bredecode"> : new lodashWrapper(result);</td></tr><tr><td class="codekolom">4881</td><td class="codekolom">4942</td><td class="bredecode"> };</td></tr><tr class="del"><td class="codekolom">4882</td><td class="codekolom"></td><td class="bredecode">- });</td></tr><tr class="add"><td class="codekolom"></td><td class="codekolom">4943</td><td class="bredecode">+ }, functions(object));</td></tr><tr><td class="codekolom">4883</td><td class="codekolom">4944</td><td class="bredecode"> }</td></tr><tr><td class="codekolom">4884</td><td class="codekolom">4945</td><td class="bredecode"> </td></tr><tr><td class="codekolom">4885</td><td class="codekolom">4946</td><td class="bredecode"> /**</td></tr><tr><td class="codekolom">4886</td><td class="codekolom">4947</td><td class="bredecode"> * Reverts the '_' variable to its previous value and returns a reference to</td></tr><tr><td class="codekolom">4887</td><td class="codekolom">4948</td><td class="bredecode"> * the `lodash` function.</td></tr><tr><td class="codekolom">4888</td><td class="codekolom">4949</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">4889</td><td class="codekolom">4950</td><td class="bredecode"> * @static</td></tr><tr><td class="codekolom">4890</td><td class="codekolom">4951</td><td class="bredecode"> * @memberOf _</td></tr><tr><td class="codekolom">4891</td><td class="codekolom">4952</td><td class="bredecode"> * @category Utilities</td></tr><tr><td class="codekolom">4892</td><td class="codekolom">4953</td><td class="bredecode"> * @returns {Function} Returns the `lodash` function.</td></tr><tr><td class="codekolom">4893</td><td class="codekolom">4954</td><td class="bredecode"> * @example</td></tr><tr><td class="codekolom">4894</td><td class="codekolom">4955</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">4895</td><td class="codekolom">4956</td><td class="bredecode"> * var lodash = _.noConflict();</td></tr><tr><td class="codekolom">4896</td><td class="codekolom">4957</td><td class="bredecode"> */</td></tr><tr><td class="codekolom">4897</td><td class="codekolom">4958</td><td class="bredecode"> function noConflict() {</td></tr><tr><td class="codekolom">4898</td><td class="codekolom">4959</td><td class="bredecode"> context._ = oldDash;</td></tr><tr><td class="codekolom">4899</td><td class="codekolom">4960</td><td class="bredecode"> return this;</td></tr><tr><td class="codekolom">4900</td><td class="codekolom">4961</td><td class="bredecode"> }</td></tr><tr><td class="codekolom">4901</td><td class="codekolom">4962</td><td class="bredecode"> </td></tr><tr><td class="codekolom">4902</td><td class="codekolom">4963</td><td class="bredecode"> /**</td></tr><tr><td class="codekolom">4903</td><td class="codekolom">4964</td><td class="bredecode"> * Converts the given `value` into an integer of the specified `radix`.</td></tr><tr><td class="codekolom">4904</td><td class="codekolom">4965</td><td class="bredecode"> * If `radix` is `undefined` or `0`, a `radix` of `10` is used unless the</td></tr><tr><td class="codekolom">4905</td><td class="codekolom">4966</td><td class="bredecode"> * `value` is a hexadecimal, in which case a `radix` of `16` is used.</td></tr><tr><td class="codekolom">4906</td><td class="codekolom">4967</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">4907</td><td class="codekolom">4968</td><td class="bredecode"> * Note: This method avoids differences in native ES3 and ES5 `parseInt`</td></tr><tr><td class="codekolom">4908</td><td class="codekolom">4969</td><td class="bredecode"> * implementations. See http://es5.github.com/#E.</td></tr><tr><td class="codekolom">4909</td><td class="codekolom">4970</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">4910</td><td class="codekolom">4971</td><td class="bredecode"> * @static</td></tr><tr><td class="codekolom">4911</td><td class="codekolom">4972</td><td class="bredecode"> * @memberOf _</td></tr><tr><td class="codekolom">4912</td><td class="codekolom">4973</td><td class="bredecode"> * @category Utilities</td></tr><tr><td class="codekolom">4913</td><td class="codekolom">4974</td><td class="bredecode"> * @param {String} value The value to parse.</td></tr><tr><td class="codekolom">4914</td><td class="codekolom">4975</td><td class="bredecode"> * @param {Number} [radix] The radix used to interpret the value to parse.</td></tr><tr><td class="codekolom">4915</td><td class="codekolom">4976</td><td class="bredecode"> * @returns {Number} Returns the new integer value.</td></tr><tr><td class="codekolom">4916</td><td class="codekolom">4977</td><td class="bredecode"> * @example</td></tr><tr><td class="codekolom">4917</td><td class="codekolom">4978</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">4918</td><td class="codekolom">4979</td><td class="bredecode"> * _.parseInt('08');</td></tr><tr><td class="codekolom">4919</td><td class="codekolom">4980</td><td class="bredecode"> * // =&gt; 8</td></tr><tr><td class="codekolom">4920</td><td class="codekolom">4981</td><td class="bredecode"> */</td></tr><tr><td class="codekolom">4921</td><td class="codekolom">4982</td><td class="bredecode"> var parseInt = nativeParseInt(whitespace + '08') == 8 ? nativeParseInt : function(value, radix) {</td></tr><tr><td class="codekolom">4922</td><td class="codekolom">4983</td><td class="bredecode"> // Firefox and Opera still follow the ES3 specified implementation of `parseInt`</td></tr><tr><td class="codekolom">4923</td><td class="codekolom">4984</td><td class="bredecode"> return nativeParseInt(isString(value) ? value.replace(reLeadingSpacesAndZeros, '') : value, radix || 0);</td></tr><tr><td class="codekolom">4924</td><td class="codekolom">4985</td><td class="bredecode"> };</td></tr><tr><td class="codekolom">4925</td><td class="codekolom">4986</td><td class="bredecode"> </td></tr><tr><td class="codekolom">4926</td><td class="codekolom">4987</td><td class="bredecode"> /**</td></tr><tr><td class="codekolom">4927</td><td class="codekolom">4988</td><td class="bredecode"> * Produces a random number between `min` and `max` (inclusive). If only one</td></tr><tr><td class="codekolom">4928</td><td class="codekolom">4989</td><td class="bredecode"> * argument is passed, a number between `0` and the given number will be returned.</td></tr><tr><td class="codekolom">4929</td><td class="codekolom">4990</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">4930</td><td class="codekolom">4991</td><td class="bredecode"> * @static</td></tr><tr><td class="codekolom">4931</td><td class="codekolom">4992</td><td class="bredecode"> * @memberOf _</td></tr><tr><td class="codekolom">4932</td><td class="codekolom">4993</td><td class="bredecode"> * @category Utilities</td></tr><tr><td class="codekolom">4933</td><td class="codekolom">4994</td><td class="bredecode"> * @param {Number} [min=0] The minimum possible value.</td></tr><tr><td class="codekolom">4934</td><td class="codekolom">4995</td><td class="bredecode"> * @param {Number} [max=1] The maximum possible value.</td></tr><tr><td class="codekolom">4935</td><td class="codekolom">4996</td><td class="bredecode"> * @returns {Number} Returns a random number.</td></tr><tr><td class="codekolom">4936</td><td class="codekolom">4997</td><td class="bredecode"> * @example</td></tr><tr><td class="codekolom">4937</td><td class="codekolom">4998</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">4938</td><td class="codekolom">4999</td><td class="bredecode"> * _.random(0, 5);</td></tr><tr><td class="codekolom">4939</td><td class="codekolom">5000</td><td class="bredecode"> * // =&gt; a number between 0 and 5</td></tr><tr><td class="codekolom">4940</td><td class="codekolom">5001</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">4941</td><td class="codekolom">5002</td><td class="bredecode"> * _.random(5);</td></tr><tr><td class="codekolom">4942</td><td class="codekolom">5003</td><td class="bredecode"> * // =&gt; also a number between 0 and 5</td></tr><tr><td class="codekolom">4943</td><td class="codekolom">5004</td><td class="bredecode"> */</td></tr><tr><td class="codekolom">4944</td><td class="codekolom">5005</td><td class="bredecode"> function random(min, max) {</td></tr><tr><td class="codekolom">4945</td><td class="codekolom">5006</td><td class="bredecode"> if (min == null &amp;&amp; max == null) {</td></tr><tr><td class="codekolom">4946</td><td class="codekolom">5007</td><td class="bredecode"> max = 1;</td></tr><tr><td class="codekolom">4947</td><td class="codekolom">5008</td><td class="bredecode"> }</td></tr><tr><td class="codekolom">4948</td><td class="codekolom">5009</td><td class="bredecode"> min = +min || 0;</td></tr><tr><td class="codekolom">4949</td><td class="codekolom">5010</td><td class="bredecode"> if (max == null) {</td></tr><tr><td class="codekolom">4950</td><td class="codekolom">5011</td><td class="bredecode"> max = min;</td></tr><tr><td class="codekolom">4951</td><td class="codekolom">5012</td><td class="bredecode"> min = 0;</td></tr><tr><td class="codekolom">4952</td><td class="codekolom">5013</td><td class="bredecode"> } else {</td></tr><tr><td class="codekolom">4953</td><td class="codekolom">5014</td><td class="bredecode"> max = +max || 0;</td></tr><tr><td class="codekolom">4954</td><td class="codekolom">5015</td><td class="bredecode"> }</td></tr><tr><td class="codekolom">4955</td><td class="codekolom">5016</td><td class="bredecode"> var rand = nativeRandom();</td></tr><tr><td class="codekolom">4956</td><td class="codekolom">5017</td><td class="bredecode"> return (min % 1 || max % 1)</td></tr><tr><td class="codekolom">4957</td><td class="codekolom">5018</td><td class="bredecode"> ? min + nativeMin(rand * (max - min + parseFloat('1e-' + ((rand +'').length - 1))), max)</td></tr><tr><td class="codekolom">4958</td><td class="codekolom">5019</td><td class="bredecode"> : min + floor(rand * (max - min + 1));</td></tr><tr><td class="codekolom">4959</td><td class="codekolom">5020</td><td class="bredecode"> }</td></tr><tr><td class="codekolom">4960</td><td class="codekolom">5021</td><td class="bredecode"> </td></tr><tr><td class="codekolom">4961</td><td class="codekolom">5022</td><td class="bredecode"> /**</td></tr><tr><td class="codekolom">4962</td><td class="codekolom">5023</td><td class="bredecode"> * Resolves the value of `property` on `object`. If `property` is a function,</td></tr><tr><td class="codekolom">4963</td><td class="codekolom">5024</td><td class="bredecode"> * it will be invoked with the `this` binding of `object` and its result returned,</td></tr><tr><td class="codekolom">4964</td><td class="codekolom">5025</td><td class="bredecode"> * else the property value is returned. If `object` is falsey, then `undefined`</td></tr><tr><td class="codekolom">4965</td><td class="codekolom">5026</td><td class="bredecode"> * is returned.</td></tr><tr><td class="codekolom">4966</td><td class="codekolom">5027</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">4967</td><td class="codekolom">5028</td><td class="bredecode"> * @static</td></tr><tr><td class="codekolom">4968</td><td class="codekolom">5029</td><td class="bredecode"> * @memberOf _</td></tr><tr><td class="codekolom">4969</td><td class="codekolom">5030</td><td class="bredecode"> * @category Utilities</td></tr><tr><td class="codekolom">4970</td><td class="codekolom">5031</td><td class="bredecode"> * @param {Object} object The object to inspect.</td></tr><tr><td class="codekolom">4971</td><td class="codekolom">5032</td><td class="bredecode"> * @param {String} property The property to get the value of.</td></tr><tr><td class="codekolom">4972</td><td class="codekolom">5033</td><td class="bredecode"> * @returns {Mixed} Returns the resolved value.</td></tr><tr><td class="codekolom">4973</td><td class="codekolom">5034</td><td class="bredecode"> * @example</td></tr><tr><td class="codekolom">4974</td><td class="codekolom">5035</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">4975</td><td class="codekolom">5036</td><td class="bredecode"> * var object = {</td></tr><tr><td class="codekolom">4976</td><td class="codekolom">5037</td><td class="bredecode"> * 'cheese': 'crumpets',</td></tr><tr><td class="codekolom">4977</td><td class="codekolom">5038</td><td class="bredecode"> * 'stuff': function() {</td></tr><tr><td class="codekolom">4978</td><td class="codekolom">5039</td><td class="bredecode"> * return 'nonsense';</td></tr><tr><td class="codekolom">4979</td><td class="codekolom">5040</td><td class="bredecode"> * }</td></tr><tr><td class="codekolom">4980</td><td class="codekolom">5041</td><td class="bredecode"> * };</td></tr><tr><td class="codekolom">4981</td><td class="codekolom">5042</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">4982</td><td class="codekolom">5043</td><td class="bredecode"> * _.result(object, 'cheese');</td></tr><tr><td class="codekolom">4983</td><td class="codekolom">5044</td><td class="bredecode"> * // =&gt; 'crumpets'</td></tr><tr><td class="codekolom">4984</td><td class="codekolom">5045</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">4985</td><td class="codekolom">5046</td><td class="bredecode"> * _.result(object, 'stuff');</td></tr><tr><td class="codekolom">4986</td><td class="codekolom">5047</td><td class="bredecode"> * // =&gt; 'nonsense'</td></tr><tr><td class="codekolom">4987</td><td class="codekolom">5048</td><td class="bredecode"> */</td></tr><tr><td class="codekolom">4988</td><td class="codekolom">5049</td><td class="bredecode"> function result(object, property) {</td></tr><tr><td class="codekolom">4989</td><td class="codekolom">5050</td><td class="bredecode"> var value = object ? object[property] : undefined;</td></tr><tr><td class="codekolom">4990</td><td class="codekolom">5051</td><td class="bredecode"> return isFunction(value) ? object[property]() : value;</td></tr><tr><td class="codekolom">4991</td><td class="codekolom">5052</td><td class="bredecode"> }</td></tr><tr><td class="codekolom">4992</td><td class="codekolom">5053</td><td class="bredecode"> </td></tr><tr><td class="codekolom">4993</td><td class="codekolom">5054</td><td class="bredecode"> /**</td></tr><tr><td class="codekolom">4994</td><td class="codekolom">5055</td><td class="bredecode"> * A micro-templating method that handles arbitrary delimiters, preserves</td></tr><tr><td class="codekolom">4995</td><td class="codekolom">5056</td><td class="bredecode"> * whitespace, and correctly escapes quotes within interpolated code.</td></tr><tr><td class="codekolom">4996</td><td class="codekolom">5057</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">4997</td><td class="codekolom">5058</td><td class="bredecode"> * Note: In the development build, `_.template` utilizes sourceURLs for easier</td></tr><tr><td class="codekolom">4998</td><td class="codekolom">5059</td><td class="bredecode"> * debugging. See http://www.html5rocks.com/en/tutorials/developertools/sourcemaps/#toc-sourceurl</td></tr><tr><td class="codekolom">4999</td><td class="codekolom">5060</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">5000</td><td class="codekolom">5061</td><td class="bredecode"> * For more information on precompiling templates see:</td></tr><tr><td class="codekolom">5001</td><td class="codekolom">5062</td><td class="bredecode"> * http://lodash.com/#custom-builds</td></tr><tr><td class="codekolom">5002</td><td class="codekolom">5063</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">5003</td><td class="codekolom">5064</td><td class="bredecode"> * For more information on Chrome extension sandboxes see:</td></tr><tr><td class="codekolom">5004</td><td class="codekolom">5065</td><td class="bredecode"> * http://developer.chrome.com/stable/extensions/sandboxingEval.html</td></tr><tr><td class="codekolom">5005</td><td class="codekolom">5066</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">5006</td><td class="codekolom">5067</td><td class="bredecode"> * @static</td></tr><tr><td class="codekolom">5007</td><td class="codekolom">5068</td><td class="bredecode"> * @memberOf _</td></tr><tr><td class="codekolom">5008</td><td class="codekolom">5069</td><td class="bredecode"> * @category Utilities</td></tr><tr><td class="codekolom">5009</td><td class="codekolom">5070</td><td class="bredecode"> * @param {String} text The template text.</td></tr><tr><td class="codekolom">5010</td><td class="codekolom">5071</td><td class="bredecode"> * @param {Object} data The data object used to populate the text.</td></tr><tr><td class="codekolom">5011</td><td class="codekolom">5072</td><td class="bredecode"> * @param {Object} options The options object.</td></tr><tr><td class="codekolom">5012</td><td class="codekolom">5073</td><td class="bredecode"> * escape - The "escape" delimiter regexp.</td></tr><tr><td class="codekolom">5013</td><td class="codekolom">5074</td><td class="bredecode"> * evaluate - The "evaluate" delimiter regexp.</td></tr><tr><td class="codekolom">5014</td><td class="codekolom">5075</td><td class="bredecode"> * interpolate - The "interpolate" delimiter regexp.</td></tr><tr><td class="codekolom">5015</td><td class="codekolom">5076</td><td class="bredecode"> * sourceURL - The sourceURL of the template's compiled source.</td></tr><tr><td class="codekolom">5016</td><td class="codekolom">5077</td><td class="bredecode"> * variable - The data object variable name.</td></tr><tr><td class="codekolom">5017</td><td class="codekolom">5078</td><td class="bredecode"> * @returns {Function|String} Returns a compiled function when no `data` object</td></tr><tr><td class="codekolom">5018</td><td class="codekolom">5079</td><td class="bredecode"> * is given, else it returns the interpolated text.</td></tr><tr><td class="codekolom">5019</td><td class="codekolom">5080</td><td class="bredecode"> * @example</td></tr><tr><td class="codekolom">5020</td><td class="codekolom">5081</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">5021</td><td class="codekolom">5082</td><td class="bredecode"> * // using a compiled template</td></tr><tr><td class="codekolom">5022</td><td class="codekolom">5083</td><td class="bredecode"> * var compiled = _.template('hello &lt;%= name %&gt;');</td></tr><tr><td class="codekolom">5023</td><td class="codekolom">5084</td><td class="bredecode"> * compiled({ 'name': 'moe' });</td></tr><tr><td class="codekolom">5024</td><td class="codekolom">5085</td><td class="bredecode"> * // =&gt; 'hello moe'</td></tr><tr><td class="codekolom">5025</td><td class="codekolom">5086</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">5026</td><td class="codekolom">5087</td><td class="bredecode"> * var list = '&lt;% _.forEach(people, function(name) { %&gt;&lt;li&gt;&lt;%= name %&gt;&lt;/li&gt;&lt;% }); %&gt;';</td></tr><tr><td class="codekolom">5027</td><td class="codekolom">5088</td><td class="bredecode"> * _.template(list, { 'people': ['moe', 'larry'] });</td></tr><tr><td class="codekolom">5028</td><td class="codekolom">5089</td><td class="bredecode"> * // =&gt; '&lt;li&gt;moe&lt;/li&gt;&lt;li&gt;larry&lt;/li&gt;'</td></tr><tr><td class="codekolom">5029</td><td class="codekolom">5090</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">5030</td><td class="codekolom">5091</td><td class="bredecode"> * // using the "escape" delimiter to escape HTML in data property values</td></tr><tr><td class="codekolom">5031</td><td class="codekolom">5092</td><td class="bredecode"> * _.template('&lt;b&gt;&lt;%- value %&gt;&lt;/b&gt;', { 'value': '&lt;script&gt;' });</td></tr><tr><td class="codekolom">5032</td><td class="codekolom">5093</td><td class="bredecode"> * // =&gt; '&lt;b&gt;&amp;lt;script&amp;gt;&lt;/b&gt;'</td></tr><tr><td class="codekolom">5033</td><td class="codekolom">5094</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">5034</td><td class="codekolom">5095</td><td class="bredecode"> * // using the ES6 delimiter as an alternative to the default "interpolate" delimiter</td></tr><tr><td class="codekolom">5035</td><td class="codekolom">5096</td><td class="bredecode"> * _.template('hello ${ name }', { 'name': 'curly' });</td></tr><tr><td class="codekolom">5036</td><td class="codekolom">5097</td><td class="bredecode"> * // =&gt; 'hello curly'</td></tr><tr><td class="codekolom">5037</td><td class="codekolom">5098</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">5038</td><td class="codekolom">5099</td><td class="bredecode"> * // using the internal `print` function in "evaluate" delimiters</td></tr><tr><td class="codekolom">5039</td><td class="codekolom">5100</td><td class="bredecode"> * _.template('&lt;% print("hello " + epithet); %&gt;!', { 'epithet': 'stooge' });</td></tr><tr><td class="codekolom">5040</td><td class="codekolom">5101</td><td class="bredecode"> * // =&gt; 'hello stooge!'</td></tr><tr><td class="codekolom">5041</td><td class="codekolom">5102</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">5042</td><td class="codekolom">5103</td><td class="bredecode"> * // using custom template delimiters</td></tr><tr><td class="codekolom">5043</td><td class="codekolom">5104</td><td class="bredecode"> * _.templateSettings = {</td></tr><tr><td class="codekolom">5044</td><td class="codekolom">5105</td><td class="bredecode"> * 'interpolate': /{{([\s\S]+?)}}/g</td></tr><tr><td class="codekolom">5045</td><td class="codekolom">5106</td><td class="bredecode"> * };</td></tr><tr><td class="codekolom">5046</td><td class="codekolom">5107</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">5047</td><td class="codekolom">5108</td><td class="bredecode"> * _.template('hello {{ name }}!', { 'name': 'mustache' });</td></tr><tr><td class="codekolom">5048</td><td class="codekolom">5109</td><td class="bredecode"> * // =&gt; 'hello mustache!'</td></tr><tr><td class="codekolom">5049</td><td class="codekolom">5110</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">5050</td><td class="codekolom">5111</td><td class="bredecode"> * // using the `sourceURL` option to specify a custom sourceURL for the template</td></tr><tr><td class="codekolom">5051</td><td class="codekolom">5112</td><td class="bredecode"> * var compiled = _.template('hello &lt;%= name %&gt;', null, { 'sourceURL': '/basic/greeting.jst' });</td></tr><tr><td class="codekolom">5052</td><td class="codekolom">5113</td><td class="bredecode"> * compiled(data);</td></tr><tr><td class="codekolom">5053</td><td class="codekolom">5114</td><td class="bredecode"> * // =&gt; find the source of "greeting.jst" under the Sources tab or Resources panel of the web inspector</td></tr><tr><td class="codekolom">5054</td><td class="codekolom">5115</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">5055</td><td class="codekolom">5116</td><td class="bredecode"> * // using the `variable` option to ensure a with-statement isn't used in the compiled template</td></tr><tr><td class="codekolom">5056</td><td class="codekolom">5117</td><td class="bredecode"> * var compiled = _.template('hi &lt;%= data.name %&gt;!', null, { 'variable': 'data' });</td></tr><tr><td class="codekolom">5057</td><td class="codekolom">5118</td><td class="bredecode"> * compiled.source;</td></tr><tr><td class="codekolom">5058</td><td class="codekolom">5119</td><td class="bredecode"> * // =&gt; function(data) {</td></tr><tr><td class="codekolom">5059</td><td class="codekolom">5120</td><td class="bredecode"> * var __t, __p = '', __e = _.escape;</td></tr><tr><td class="codekolom">5060</td><td class="codekolom">5121</td><td class="bredecode"> * __p += 'hi ' + ((__t = ( data.name )) == null ? '' : __t) + '!';</td></tr><tr><td class="codekolom">5061</td><td class="codekolom">5122</td><td class="bredecode"> * return __p;</td></tr><tr><td class="codekolom">5062</td><td class="codekolom">5123</td><td class="bredecode"> * }</td></tr><tr><td class="codekolom">5063</td><td class="codekolom">5124</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">5064</td><td class="codekolom">5125</td><td class="bredecode"> * // using the `source` property to inline compiled templates for meaningful</td></tr><tr><td class="codekolom">5065</td><td class="codekolom">5126</td><td class="bredecode"> * // line numbers in error messages and a stack trace</td></tr><tr><td class="codekolom">5066</td><td class="codekolom">5127</td><td class="bredecode"> * fs.writeFileSync(path.join(cwd, 'jst.js'), '\</td></tr><tr><td class="codekolom">5067</td><td class="codekolom">5128</td><td class="bredecode"> * var JST = {\</td></tr><tr><td class="codekolom">5068</td><td class="codekolom">5129</td><td class="bredecode"> * "main": ' + _.template(mainText).source + '\</td></tr><tr><td class="codekolom">5069</td><td class="codekolom">5130</td><td class="bredecode"> * };\</td></tr><tr><td class="codekolom">5070</td><td class="codekolom">5131</td><td class="bredecode"> * ');</td></tr><tr><td class="codekolom">5071</td><td class="codekolom">5132</td><td class="bredecode"> */</td></tr><tr><td class="codekolom">5072</td><td class="codekolom">5133</td><td class="bredecode"> function template(text, data, options) {</td></tr><tr><td class="codekolom">5073</td><td class="codekolom">5134</td><td class="bredecode"> // based on John Resig's `tmpl` implementation</td></tr><tr><td class="codekolom">5074</td><td class="codekolom">5135</td><td class="bredecode"> // http://ejohn.org/blog/javascript-micro-templating/</td></tr><tr><td class="codekolom">5075</td><td class="codekolom">5136</td><td class="bredecode"> // and Laura Doktorova's doT.js</td></tr><tr><td class="codekolom">5076</td><td class="codekolom">5137</td><td class="bredecode"> // https://github.com/olado/doT</td></tr><tr><td class="codekolom">5077</td><td class="codekolom">5138</td><td class="bredecode"> var settings = lodash.templateSettings;</td></tr><tr><td class="codekolom">5078</td><td class="codekolom">5139</td><td class="bredecode"> text || (text = '');</td></tr><tr><td class="codekolom">5079</td><td class="codekolom">5140</td><td class="bredecode"> </td></tr><tr><td class="codekolom">5080</td><td class="codekolom">5141</td><td class="bredecode"> // avoid missing dependencies when `iteratorTemplate` is not defined</td></tr><tr><td class="codekolom">5081</td><td class="codekolom">5142</td><td class="bredecode"> options = defaults({}, options, settings);</td></tr><tr><td class="codekolom">5082</td><td class="codekolom">5143</td><td class="bredecode"> </td></tr><tr><td class="codekolom">5083</td><td class="codekolom">5144</td><td class="bredecode"> var imports = defaults({}, options.imports, settings.imports),</td></tr><tr><td class="codekolom">5084</td><td class="codekolom">5145</td><td class="bredecode"> importsKeys = keys(imports),</td></tr><tr><td class="codekolom">5085</td><td class="codekolom">5146</td><td class="bredecode"> importsValues = values(imports);</td></tr><tr><td class="codekolom">5086</td><td class="codekolom">5147</td><td class="bredecode"> </td></tr><tr><td class="codekolom">5087</td><td class="codekolom">5148</td><td class="bredecode"> var isEvaluating,</td></tr><tr><td class="codekolom">5088</td><td class="codekolom">5149</td><td class="bredecode"> index = 0,</td></tr><tr><td class="codekolom">5089</td><td class="codekolom">5150</td><td class="bredecode"> interpolate = options.interpolate || reNoMatch,</td></tr><tr><td class="codekolom">5090</td><td class="codekolom">5151</td><td class="bredecode"> source = "__p += '";</td></tr><tr><td class="codekolom">5091</td><td class="codekolom">5152</td><td class="bredecode"> </td></tr><tr><td class="codekolom">5092</td><td class="codekolom">5153</td><td class="bredecode"> // compile the regexp to match each delimiter</td></tr><tr><td class="codekolom">5093</td><td class="codekolom">5154</td><td class="bredecode"> var reDelimiters = RegExp(</td></tr><tr><td class="codekolom">5094</td><td class="codekolom">5155</td><td class="bredecode"> (options.escape || reNoMatch).source + '|' +</td></tr><tr><td class="codekolom">5095</td><td class="codekolom">5156</td><td class="bredecode"> interpolate.source + '|' +</td></tr><tr><td class="codekolom">5096</td><td class="codekolom">5157</td><td class="bredecode"> (interpolate === reInterpolate ? reEsTemplate : reNoMatch).source + '|' +</td></tr><tr><td class="codekolom">5097</td><td class="codekolom">5158</td><td class="bredecode"> (options.evaluate || reNoMatch).source + '|$'</td></tr><tr><td class="codekolom">5098</td><td class="codekolom">5159</td><td class="bredecode"> , 'g');</td></tr><tr><td class="codekolom">5099</td><td class="codekolom">5160</td><td class="bredecode"> </td></tr><tr><td class="codekolom">5100</td><td class="codekolom">5161</td><td class="bredecode"> text.replace(reDelimiters, function(match, escapeValue, interpolateValue, esTemplateValue, evaluateValue, offset) {</td></tr><tr><td class="codekolom">5101</td><td class="codekolom">5162</td><td class="bredecode"> interpolateValue || (interpolateValue = esTemplateValue);</td></tr><tr><td class="codekolom">5102</td><td class="codekolom">5163</td><td class="bredecode"> </td></tr><tr><td class="codekolom">5103</td><td class="codekolom">5164</td><td class="bredecode"> // escape characters that cannot be included in string literals</td></tr><tr><td class="codekolom">5104</td><td class="codekolom">5165</td><td class="bredecode"> source += text.slice(index, offset).replace(reUnescapedString, escapeStringChar);</td></tr><tr><td class="codekolom">5105</td><td class="codekolom">5166</td><td class="bredecode"> </td></tr><tr><td class="codekolom">5106</td><td class="codekolom">5167</td><td class="bredecode"> // replace delimiters with snippets</td></tr><tr><td class="codekolom">5107</td><td class="codekolom">5168</td><td class="bredecode"> if (escapeValue) {</td></tr><tr><td class="codekolom">5108</td><td class="codekolom">5169</td><td class="bredecode"> source += "' +\n__e(" + escapeValue + ") +\n'";</td></tr><tr><td class="codekolom">5109</td><td class="codekolom">5170</td><td class="bredecode"> }</td></tr><tr><td class="codekolom">5110</td><td class="codekolom">5171</td><td class="bredecode"> if (evaluateValue) {</td></tr><tr><td class="codekolom">5111</td><td class="codekolom">5172</td><td class="bredecode"> isEvaluating = true;</td></tr><tr><td class="codekolom">5112</td><td class="codekolom">5173</td><td class="bredecode"> source += "';\n" + evaluateValue + ";\n__p += '";</td></tr><tr><td class="codekolom">5113</td><td class="codekolom">5174</td><td class="bredecode"> }</td></tr><tr><td class="codekolom">5114</td><td class="codekolom">5175</td><td class="bredecode"> if (interpolateValue) {</td></tr><tr><td class="codekolom">5115</td><td class="codekolom">5176</td><td class="bredecode"> source += "' +\n((__t = (" + interpolateValue + ")) == null ? '' : __t) +\n'";</td></tr><tr><td class="codekolom">5116</td><td class="codekolom">5177</td><td class="bredecode"> }</td></tr><tr><td class="codekolom">5117</td><td class="codekolom">5178</td><td class="bredecode"> index = offset + match.length;</td></tr><tr><td class="codekolom">5118</td><td class="codekolom">5179</td><td class="bredecode"> </td></tr><tr><td class="codekolom">5119</td><td class="codekolom">5180</td><td class="bredecode"> // the JS engine embedded in Adobe products requires returning the `match`</td></tr><tr><td class="codekolom">5120</td><td class="codekolom">5181</td><td class="bredecode"> // string in order to produce the correct `offset` value</td></tr><tr><td class="codekolom">5121</td><td class="codekolom">5182</td><td class="bredecode"> return match;</td></tr><tr><td class="codekolom">5122</td><td class="codekolom">5183</td><td class="bredecode"> });</td></tr><tr><td class="codekolom">5123</td><td class="codekolom">5184</td><td class="bredecode"> </td></tr><tr><td class="codekolom">5124</td><td class="codekolom">5185</td><td class="bredecode"> source += "';\n";</td></tr><tr><td class="codekolom">5125</td><td class="codekolom">5186</td><td class="bredecode"> </td></tr><tr><td class="codekolom">5126</td><td class="codekolom">5187</td><td class="bredecode"> // if `variable` is not specified, wrap a with-statement around the generated</td></tr><tr><td class="codekolom">5127</td><td class="codekolom">5188</td><td class="bredecode"> // code to add the data object to the top of the scope chain</td></tr><tr><td class="codekolom">5128</td><td class="codekolom">5189</td><td class="bredecode"> var variable = options.variable,</td></tr><tr><td class="codekolom">5129</td><td class="codekolom">5190</td><td class="bredecode"> hasVariable = variable;</td></tr><tr><td class="codekolom">5130</td><td class="codekolom">5191</td><td class="bredecode"> </td></tr><tr><td class="codekolom">5131</td><td class="codekolom">5192</td><td class="bredecode"> if (!hasVariable) {</td></tr><tr><td class="codekolom">5132</td><td class="codekolom">5193</td><td class="bredecode"> variable = 'obj';</td></tr><tr><td class="codekolom">5133</td><td class="codekolom">5194</td><td class="bredecode"> source = 'with (' + variable + ') {\n' + source + '\n}\n';</td></tr><tr><td class="codekolom">5134</td><td class="codekolom">5195</td><td class="bredecode"> }</td></tr><tr><td class="codekolom">5135</td><td class="codekolom">5196</td><td class="bredecode"> // cleanup code by stripping empty strings</td></tr><tr><td class="codekolom">5136</td><td class="codekolom">5197</td><td class="bredecode"> source = (isEvaluating ? source.replace(reEmptyStringLeading, '') : source)</td></tr><tr><td class="codekolom">5137</td><td class="codekolom">5198</td><td class="bredecode"> .replace(reEmptyStringMiddle, '$1')</td></tr><tr><td class="codekolom">5138</td><td class="codekolom">5199</td><td class="bredecode"> .replace(reEmptyStringTrailing, '$1;');</td></tr><tr><td class="codekolom">5139</td><td class="codekolom">5200</td><td class="bredecode"> </td></tr><tr><td class="codekolom">5140</td><td class="codekolom">5201</td><td class="bredecode"> // frame code as the function body</td></tr><tr><td class="codekolom">5141</td><td class="codekolom">5202</td><td class="bredecode"> source = 'function(' + variable + ') {\n' +</td></tr><tr><td class="codekolom">5142</td><td class="codekolom">5203</td><td class="bredecode"> (hasVariable ? '' : variable + ' || (' + variable + ' = {});\n') +</td></tr><tr><td class="codekolom">5143</td><td class="codekolom">5204</td><td class="bredecode"> "var __t, __p = '', __e = _.escape" +</td></tr><tr><td class="codekolom">5144</td><td class="codekolom">5205</td><td class="bredecode"> (isEvaluating</td></tr><tr><td class="codekolom">5145</td><td class="codekolom">5206</td><td class="bredecode"> ? ', __j = Array.prototype.join;\n' +</td></tr><tr><td class="codekolom">5146</td><td class="codekolom">5207</td><td class="bredecode"> "function print() { __p += __j.call(arguments, '') }\n"</td></tr><tr><td class="codekolom">5147</td><td class="codekolom">5208</td><td class="bredecode"> : ';\n'</td></tr><tr><td class="codekolom">5148</td><td class="codekolom">5209</td><td class="bredecode"> ) +</td></tr><tr><td class="codekolom">5149</td><td class="codekolom">5210</td><td class="bredecode"> source +</td></tr><tr><td class="codekolom">5150</td><td class="codekolom">5211</td><td class="bredecode"> 'return __p\n}';</td></tr><tr><td class="codekolom">5151</td><td class="codekolom">5212</td><td class="bredecode"> </td></tr><tr><td class="codekolom">5152</td><td class="codekolom">5213</td><td class="bredecode"> // Use a sourceURL for easier debugging and wrap in a multi-line comment to</td></tr><tr><td class="codekolom">5153</td><td class="codekolom">5214</td><td class="bredecode"> // avoid issues with Narwhal, IE conditional compilation, and the JS engine</td></tr><tr><td class="codekolom">5154</td><td class="codekolom">5215</td><td class="bredecode"> // embedded in Adobe products.</td></tr><tr><td class="codekolom">5155</td><td class="codekolom">5216</td><td class="bredecode"> // http://www.html5rocks.com/en/tutorials/developertools/sourcemaps/#toc-sourceurl</td></tr><tr><td class="codekolom">5156</td><td class="codekolom">5217</td><td class="bredecode"> var sourceURL = '\n/*\n//@ sourceURL=' + (options.sourceURL || '/lodash/template/source[' + (templateCounter++) + ']') + '\n*/';</td></tr><tr><td class="codekolom">5157</td><td class="codekolom">5218</td><td class="bredecode"> </td></tr><tr><td class="codekolom">5158</td><td class="codekolom">5219</td><td class="bredecode"> try {</td></tr><tr><td class="codekolom">5159</td><td class="codekolom">5220</td><td class="bredecode"> var result = Function(importsKeys, 'return ' + source + sourceURL).apply(undefined, importsValues);</td></tr><tr><td class="codekolom">5160</td><td class="codekolom">5221</td><td class="bredecode"> } catch(e) {</td></tr><tr><td class="codekolom">5161</td><td class="codekolom">5222</td><td class="bredecode"> e.source = source;</td></tr><tr><td class="codekolom">5162</td><td class="codekolom">5223</td><td class="bredecode"> throw e;</td></tr><tr><td class="codekolom">5163</td><td class="codekolom">5224</td><td class="bredecode"> }</td></tr><tr><td class="codekolom">5164</td><td class="codekolom">5225</td><td class="bredecode"> if (data) {</td></tr><tr><td class="codekolom">5165</td><td class="codekolom">5226</td><td class="bredecode"> return result(data);</td></tr><tr><td class="codekolom">5166</td><td class="codekolom">5227</td><td class="bredecode"> }</td></tr><tr><td class="codekolom">5167</td><td class="codekolom">5228</td><td class="bredecode"> // provide the compiled function's source via its `toString` method, in</td></tr><tr><td class="codekolom">5168</td><td class="codekolom">5229</td><td class="bredecode"> // supported environments, or the `source` property as a convenience for</td></tr><tr><td class="codekolom">5169</td><td class="codekolom">5230</td><td class="bredecode"> // inlining compiled templates during the build process</td></tr><tr><td class="codekolom">5170</td><td class="codekolom">5231</td><td class="bredecode"> result.source = source;</td></tr><tr><td class="codekolom">5171</td><td class="codekolom">5232</td><td class="bredecode"> return result;</td></tr><tr><td class="codekolom">5172</td><td class="codekolom">5233</td><td class="bredecode"> }</td></tr><tr><td class="codekolom">5173</td><td class="codekolom">5234</td><td class="bredecode"> </td></tr><tr><td class="codekolom">5174</td><td class="codekolom">5235</td><td class="bredecode"> /**</td></tr><tr><td class="codekolom">5175</td><td class="codekolom">5236</td><td class="bredecode"> * Executes the `callback` function `n` times, returning an array of the results</td></tr><tr><td class="codekolom">5176</td><td class="codekolom">5237</td><td class="bredecode"> * of each `callback` execution. The `callback` is bound to `thisArg` and invoked</td></tr><tr><td class="codekolom">5177</td><td class="codekolom">5238</td><td class="bredecode"> * with one argument; (index).</td></tr><tr><td class="codekolom">5178</td><td class="codekolom">5239</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">5179</td><td class="codekolom">5240</td><td class="bredecode"> * @static</td></tr><tr><td class="codekolom">5180</td><td class="codekolom">5241</td><td class="bredecode"> * @memberOf _</td></tr><tr><td class="codekolom">5181</td><td class="codekolom">5242</td><td class="bredecode"> * @category Utilities</td></tr><tr><td class="codekolom">5182</td><td class="codekolom">5243</td><td class="bredecode"> * @param {Number} n The number of times to execute the callback.</td></tr><tr><td class="codekolom">5183</td><td class="codekolom">5244</td><td class="bredecode"> * @param {Function} callback The function called per iteration.</td></tr><tr><td class="codekolom">5184</td><td class="codekolom">5245</td><td class="bredecode"> * @param {Mixed} [thisArg] The `this` binding of `callback`.</td></tr><tr><td class="codekolom">5185</td><td class="codekolom">5246</td><td class="bredecode"> * @returns {Array} Returns a new array of the results of each `callback` execution.</td></tr><tr><td class="codekolom">5186</td><td class="codekolom">5247</td><td class="bredecode"> * @example</td></tr><tr><td class="codekolom">5187</td><td class="codekolom">5248</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">5188</td><td class="codekolom">5249</td><td class="bredecode"> * var diceRolls = _.times(3, _.partial(_.random, 1, 6));</td></tr><tr><td class="codekolom">5189</td><td class="codekolom">5250</td><td class="bredecode"> * // =&gt; [3, 6, 4]</td></tr><tr><td class="codekolom">5190</td><td class="codekolom">5251</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">5191</td><td class="codekolom">5252</td><td class="bredecode"> * _.times(3, function(n) { mage.castSpell(n); });</td></tr><tr><td class="codekolom">5192</td><td class="codekolom">5253</td><td class="bredecode"> * // =&gt; calls `mage.castSpell(n)` three times, passing `n` of `0`, `1`, and `2` respectively</td></tr><tr><td class="codekolom">5193</td><td class="codekolom">5254</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">5194</td><td class="codekolom">5255</td><td class="bredecode"> * _.times(3, function(n) { this.cast(n); }, mage);</td></tr><tr><td class="codekolom">5195</td><td class="codekolom">5256</td><td class="bredecode"> * // =&gt; also calls `mage.castSpell(n)` three times</td></tr><tr><td class="codekolom">5196</td><td class="codekolom">5257</td><td class="bredecode"> */</td></tr><tr><td class="codekolom">5197</td><td class="codekolom">5258</td><td class="bredecode"> function times(n, callback, thisArg) {</td></tr><tr><td class="codekolom">5198</td><td class="codekolom">5259</td><td class="bredecode"> n = (n = +n) &gt; -1 ? n : 0;</td></tr><tr><td class="codekolom">5199</td><td class="codekolom">5260</td><td class="bredecode"> var index = -1,</td></tr><tr><td class="codekolom">5200</td><td class="codekolom">5261</td><td class="bredecode"> result = Array(n);</td></tr><tr><td class="codekolom">5201</td><td class="codekolom">5262</td><td class="bredecode"> </td></tr><tr><td class="codekolom">5202</td><td class="codekolom">5263</td><td class="bredecode"> callback = lodash.createCallback(callback, thisArg, 1);</td></tr><tr><td class="codekolom">5203</td><td class="codekolom">5264</td><td class="bredecode"> while (++index &lt; n) {</td></tr><tr><td class="codekolom">5204</td><td class="codekolom">5265</td><td class="bredecode"> result[index] = callback(index);</td></tr><tr><td class="codekolom">5205</td><td class="codekolom">5266</td><td class="bredecode"> }</td></tr><tr><td class="codekolom">5206</td><td class="codekolom">5267</td><td class="bredecode"> return result;</td></tr><tr><td class="codekolom">5207</td><td class="codekolom">5268</td><td class="bredecode"> }</td></tr><tr><td class="codekolom">5208</td><td class="codekolom">5269</td><td class="bredecode"> </td></tr><tr><td class="codekolom">5209</td><td class="codekolom">5270</td><td class="bredecode"> /**</td></tr><tr><td class="codekolom">5210</td><td class="codekolom">5271</td><td class="bredecode"> * The inverse of `_.escape`, this method converts the HTML entities</td></tr><tr><td class="codekolom">5211</td><td class="codekolom">5272</td><td class="bredecode"> * `&amp;amp;`, `&amp;lt;`, `&amp;gt;`, `&amp;quot;`, and `&amp;#39;` in `string` to their</td></tr><tr><td class="codekolom">5212</td><td class="codekolom">5273</td><td class="bredecode"> * corresponding characters.</td></tr><tr><td class="codekolom">5213</td><td class="codekolom">5274</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">5214</td><td class="codekolom">5275</td><td class="bredecode"> * @static</td></tr><tr><td class="codekolom">5215</td><td class="codekolom">5276</td><td class="bredecode"> * @memberOf _</td></tr><tr><td class="codekolom">5216</td><td class="codekolom">5277</td><td class="bredecode"> * @category Utilities</td></tr><tr><td class="codekolom">5217</td><td class="codekolom">5278</td><td class="bredecode"> * @param {String} string The string to unescape.</td></tr><tr><td class="codekolom">5218</td><td class="codekolom">5279</td><td class="bredecode"> * @returns {String} Returns the unescaped string.</td></tr><tr><td class="codekolom">5219</td><td class="codekolom">5280</td><td class="bredecode"> * @example</td></tr><tr><td class="codekolom">5220</td><td class="codekolom">5281</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">5221</td><td class="codekolom">5282</td><td class="bredecode"> * _.unescape('Moe, Larry &amp;amp; Curly');</td></tr><tr><td class="codekolom">5222</td><td class="codekolom">5283</td><td class="bredecode"> * // =&gt; 'Moe, Larry &amp; Curly'</td></tr><tr><td class="codekolom">5223</td><td class="codekolom">5284</td><td class="bredecode"> */</td></tr><tr><td class="codekolom">5224</td><td class="codekolom">5285</td><td class="bredecode"> function unescape(string) {</td></tr><tr><td class="codekolom">5225</td><td class="codekolom">5286</td><td class="bredecode"> return string == null ? '' : String(string).replace(reEscapedHtml, unescapeHtmlChar);</td></tr><tr><td class="codekolom">5226</td><td class="codekolom">5287</td><td class="bredecode"> }</td></tr><tr><td class="codekolom">5227</td><td class="codekolom">5288</td><td class="bredecode"> </td></tr><tr><td class="codekolom">5228</td><td class="codekolom">5289</td><td class="bredecode"> /**</td></tr><tr><td class="codekolom">5229</td><td class="codekolom">5290</td><td class="bredecode"> * Generates a unique ID. If `prefix` is passed, the ID will be appended to it.</td></tr><tr><td class="codekolom">5230</td><td class="codekolom">5291</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">5231</td><td class="codekolom">5292</td><td class="bredecode"> * @static</td></tr><tr><td class="codekolom">5232</td><td class="codekolom">5293</td><td class="bredecode"> * @memberOf _</td></tr><tr><td class="codekolom">5233</td><td class="codekolom">5294</td><td class="bredecode"> * @category Utilities</td></tr><tr><td class="codekolom">5234</td><td class="codekolom">5295</td><td class="bredecode"> * @param {String} [prefix] The value to prefix the ID with.</td></tr><tr><td class="codekolom">5235</td><td class="codekolom">5296</td><td class="bredecode"> * @returns {String} Returns the unique ID.</td></tr><tr><td class="codekolom">5236</td><td class="codekolom">5297</td><td class="bredecode"> * @example</td></tr><tr><td class="codekolom">5237</td><td class="codekolom">5298</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">5238</td><td class="codekolom">5299</td><td class="bredecode"> * _.uniqueId('contact_');</td></tr><tr><td class="codekolom">5239</td><td class="codekolom">5300</td><td class="bredecode"> * // =&gt; 'contact_104'</td></tr><tr><td class="codekolom">5240</td><td class="codekolom">5301</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">5241</td><td class="codekolom">5302</td><td class="bredecode"> * _.uniqueId();</td></tr><tr><td class="codekolom">5242</td><td class="codekolom">5303</td><td class="bredecode"> * // =&gt; '105'</td></tr><tr><td class="codekolom">5243</td><td class="codekolom">5304</td><td class="bredecode"> */</td></tr><tr><td class="codekolom">5244</td><td class="codekolom">5305</td><td class="bredecode"> function uniqueId(prefix) {</td></tr><tr><td class="codekolom">5245</td><td class="codekolom">5306</td><td class="bredecode"> var id = ++idCounter;</td></tr><tr><td class="codekolom">5246</td><td class="codekolom">5307</td><td class="bredecode"> return String(prefix == null ? '' : prefix) + id;</td></tr><tr><td class="codekolom">5247</td><td class="codekolom">5308</td><td class="bredecode"> }</td></tr><tr><td class="codekolom">5248</td><td class="codekolom">5309</td><td class="bredecode"> </td></tr><tr><td class="codekolom">5249</td><td class="codekolom">5310</td><td class="bredecode"> /*--------------------------------------------------------------------------*/</td></tr><tr><td class="codekolom">5250</td><td class="codekolom">5311</td><td class="bredecode"> </td></tr><tr><td class="codekolom">5251</td><td class="codekolom">5312</td><td class="bredecode"> /**</td></tr><tr><td class="codekolom">5252</td><td class="codekolom">5313</td><td class="bredecode"> * Invokes `interceptor` with the `value` as the first argument, and then</td></tr><tr><td class="codekolom">5253</td><td class="codekolom">5314</td><td class="bredecode"> * returns `value`. The purpose of this method is to "tap into" a method chain,</td></tr><tr><td class="codekolom">5254</td><td class="codekolom">5315</td><td class="bredecode"> * in order to perform operations on intermediate results within the chain.</td></tr><tr><td class="codekolom">5255</td><td class="codekolom">5316</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">5256</td><td class="codekolom">5317</td><td class="bredecode"> * @static</td></tr><tr><td class="codekolom">5257</td><td class="codekolom">5318</td><td class="bredecode"> * @memberOf _</td></tr><tr><td class="codekolom">5258</td><td class="codekolom">5319</td><td class="bredecode"> * @category Chaining</td></tr><tr><td class="codekolom">5259</td><td class="codekolom">5320</td><td class="bredecode"> * @param {Mixed} value The value to pass to `interceptor`.</td></tr><tr><td class="codekolom">5260</td><td class="codekolom">5321</td><td class="bredecode"> * @param {Function} interceptor The function to invoke.</td></tr><tr><td class="codekolom">5261</td><td class="codekolom">5322</td><td class="bredecode"> * @returns {Mixed} Returns `value`.</td></tr><tr><td class="codekolom">5262</td><td class="codekolom">5323</td><td class="bredecode"> * @example</td></tr><tr><td class="codekolom">5263</td><td class="codekolom">5324</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">5264</td><td class="codekolom">5325</td><td class="bredecode"> * _([1, 2, 3, 4])</td></tr><tr><td class="codekolom">5265</td><td class="codekolom">5326</td><td class="bredecode"> * .filter(function(num) { return num % 2 == 0; })</td></tr><tr><td class="codekolom">5266</td><td class="codekolom">5327</td><td class="bredecode"> * .tap(alert)</td></tr><tr><td class="codekolom">5267</td><td class="codekolom">5328</td><td class="bredecode"> * .map(function(num) { return num * num; })</td></tr><tr><td class="codekolom">5268</td><td class="codekolom">5329</td><td class="bredecode"> * .value();</td></tr><tr><td class="codekolom">5269</td><td class="codekolom">5330</td><td class="bredecode"> * // =&gt; // [2, 4] (alerted)</td></tr><tr><td class="codekolom">5270</td><td class="codekolom">5331</td><td class="bredecode"> * // =&gt; [4, 16]</td></tr><tr><td class="codekolom">5271</td><td class="codekolom">5332</td><td class="bredecode"> */</td></tr><tr><td class="codekolom">5272</td><td class="codekolom">5333</td><td class="bredecode"> function tap(value, interceptor) {</td></tr><tr><td class="codekolom">5273</td><td class="codekolom">5334</td><td class="bredecode"> interceptor(value);</td></tr><tr><td class="codekolom">5274</td><td class="codekolom">5335</td><td class="bredecode"> return value;</td></tr><tr><td class="codekolom">5275</td><td class="codekolom">5336</td><td class="bredecode"> }</td></tr><tr><td class="codekolom">5276</td><td class="codekolom">5337</td><td class="bredecode"> </td></tr><tr><td class="codekolom">5277</td><td class="codekolom">5338</td><td class="bredecode"> /**</td></tr><tr><td class="codekolom">5278</td><td class="codekolom">5339</td><td class="bredecode"> * Produces the `toString` result of the wrapped value.</td></tr><tr><td class="codekolom">5279</td><td class="codekolom">5340</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">5280</td><td class="codekolom">5341</td><td class="bredecode"> * @name toString</td></tr><tr><td class="codekolom">5281</td><td class="codekolom">5342</td><td class="bredecode"> * @memberOf _</td></tr><tr><td class="codekolom">5282</td><td class="codekolom">5343</td><td class="bredecode"> * @category Chaining</td></tr><tr><td class="codekolom">5283</td><td class="codekolom">5344</td><td class="bredecode"> * @returns {String} Returns the string result.</td></tr><tr><td class="codekolom">5284</td><td class="codekolom">5345</td><td class="bredecode"> * @example</td></tr><tr><td class="codekolom">5285</td><td class="codekolom">5346</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">5286</td><td class="codekolom">5347</td><td class="bredecode"> * _([1, 2, 3]).toString();</td></tr><tr><td class="codekolom">5287</td><td class="codekolom">5348</td><td class="bredecode"> * // =&gt; '1,2,3'</td></tr><tr><td class="codekolom">5288</td><td class="codekolom">5349</td><td class="bredecode"> */</td></tr><tr><td class="codekolom">5289</td><td class="codekolom">5350</td><td class="bredecode"> function wrapperToString() {</td></tr><tr><td class="codekolom">5290</td><td class="codekolom">5351</td><td class="bredecode"> return String(this.__wrapped__);</td></tr><tr><td class="codekolom">5291</td><td class="codekolom">5352</td><td class="bredecode"> }</td></tr><tr><td class="codekolom">5292</td><td class="codekolom">5353</td><td class="bredecode"> </td></tr><tr><td class="codekolom">5293</td><td class="codekolom">5354</td><td class="bredecode"> /**</td></tr><tr><td class="codekolom">5294</td><td class="codekolom">5355</td><td class="bredecode"> * Extracts the wrapped value.</td></tr><tr><td class="codekolom">5295</td><td class="codekolom">5356</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">5296</td><td class="codekolom">5357</td><td class="bredecode"> * @name valueOf</td></tr><tr><td class="codekolom">5297</td><td class="codekolom">5358</td><td class="bredecode"> * @memberOf _</td></tr><tr><td class="codekolom">5298</td><td class="codekolom">5359</td><td class="bredecode"> * @alias value</td></tr><tr><td class="codekolom">5299</td><td class="codekolom">5360</td><td class="bredecode"> * @category Chaining</td></tr><tr><td class="codekolom">5300</td><td class="codekolom">5361</td><td class="bredecode"> * @returns {Mixed} Returns the wrapped value.</td></tr><tr><td class="codekolom">5301</td><td class="codekolom">5362</td><td class="bredecode"> * @example</td></tr><tr><td class="codekolom">5302</td><td class="codekolom">5363</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">5303</td><td class="codekolom">5364</td><td class="bredecode"> * _([1, 2, 3]).valueOf();</td></tr><tr><td class="codekolom">5304</td><td class="codekolom">5365</td><td class="bredecode"> * // =&gt; [1, 2, 3]</td></tr><tr><td class="codekolom">5305</td><td class="codekolom">5366</td><td class="bredecode"> */</td></tr><tr><td class="codekolom">5306</td><td class="codekolom">5367</td><td class="bredecode"> function wrapperValueOf() {</td></tr><tr><td class="codekolom">5307</td><td class="codekolom">5368</td><td class="bredecode"> return this.__wrapped__;</td></tr><tr><td class="codekolom">5308</td><td class="codekolom">5369</td><td class="bredecode"> }</td></tr><tr><td class="codekolom">5309</td><td class="codekolom">5370</td><td class="bredecode"> </td></tr><tr><td class="codekolom">5310</td><td class="codekolom">5371</td><td class="bredecode"> /*--------------------------------------------------------------------------*/</td></tr><tr><td class="codekolom">5311</td><td class="codekolom">5372</td><td class="bredecode"> </td></tr><tr><td class="codekolom">5312</td><td class="codekolom">5373</td><td class="bredecode"> // add functions that return wrapped values when chaining</td></tr><tr><td class="codekolom">5313</td><td class="codekolom">5374</td><td class="bredecode"> lodash.after = after;</td></tr><tr><td class="codekolom">5314</td><td class="codekolom">5375</td><td class="bredecode"> lodash.assign = assign;</td></tr><tr><td class="codekolom">5315</td><td class="codekolom">5376</td><td class="bredecode"> lodash.at = at;</td></tr><tr><td class="codekolom">5316</td><td class="codekolom">5377</td><td class="bredecode"> lodash.bind = bind;</td></tr><tr><td class="codekolom">5317</td><td class="codekolom">5378</td><td class="bredecode"> lodash.bindAll = bindAll;</td></tr><tr><td class="codekolom">5318</td><td class="codekolom">5379</td><td class="bredecode"> lodash.bindKey = bindKey;</td></tr><tr><td class="codekolom">5319</td><td class="codekolom">5380</td><td class="bredecode"> lodash.compact = compact;</td></tr><tr><td class="codekolom">5320</td><td class="codekolom">5381</td><td class="bredecode"> lodash.compose = compose;</td></tr><tr><td class="codekolom">5321</td><td class="codekolom">5382</td><td class="bredecode"> lodash.countBy = countBy;</td></tr><tr><td class="codekolom">5322</td><td class="codekolom">5383</td><td class="bredecode"> lodash.createCallback = createCallback;</td></tr><tr><td class="codekolom">5323</td><td class="codekolom">5384</td><td class="bredecode"> lodash.debounce = debounce;</td></tr><tr><td class="codekolom">5324</td><td class="codekolom">5385</td><td class="bredecode"> lodash.defaults = defaults;</td></tr><tr><td class="codekolom">5325</td><td class="codekolom">5386</td><td class="bredecode"> lodash.defer = defer;</td></tr><tr><td class="codekolom">5326</td><td class="codekolom">5387</td><td class="bredecode"> lodash.delay = delay;</td></tr><tr><td class="codekolom">5327</td><td class="codekolom">5388</td><td class="bredecode"> lodash.difference = difference;</td></tr><tr class="add"><td class="codekolom"></td><td class="codekolom">5389</td><td class="bredecode">+ lodash.drop = drop;</td></tr><tr><td class="codekolom">5328</td><td class="codekolom">5390</td><td class="bredecode"> lodash.filter = filter;</td></tr><tr><td class="codekolom">5329</td><td class="codekolom">5391</td><td class="bredecode"> lodash.flatten = flatten;</td></tr><tr class="add"><td class="codekolom"></td><td class="codekolom">5392</td><td class="bredecode">+ lodash.flattenDeep = flattenDeep;</td></tr><tr><td class="codekolom">5330</td><td class="codekolom">5393</td><td class="bredecode"> lodash.forEach = forEach;</td></tr><tr><td class="codekolom">5331</td><td class="codekolom">5394</td><td class="bredecode"> lodash.forIn = forIn;</td></tr><tr><td class="codekolom">5332</td><td class="codekolom">5395</td><td class="bredecode"> lodash.forOwn = forOwn;</td></tr><tr><td class="codekolom">5333</td><td class="codekolom">5396</td><td class="bredecode"> lodash.functions = functions;</td></tr><tr><td class="codekolom">5334</td><td class="codekolom">5397</td><td class="bredecode"> lodash.groupBy = groupBy;</td></tr><tr><td class="codekolom">5335</td><td class="codekolom">5398</td><td class="bredecode"> lodash.initial = initial;</td></tr><tr><td class="codekolom">5336</td><td class="codekolom">5399</td><td class="bredecode"> lodash.intersection = intersection;</td></tr><tr><td class="codekolom">5337</td><td class="codekolom">5400</td><td class="bredecode"> lodash.invert = invert;</td></tr><tr><td class="codekolom">5338</td><td class="codekolom">5401</td><td class="bredecode"> lodash.invoke = invoke;</td></tr><tr><td class="codekolom">5339</td><td class="codekolom">5402</td><td class="bredecode"> lodash.keys = keys;</td></tr><tr><td class="codekolom">5340</td><td class="codekolom">5403</td><td class="bredecode"> lodash.map = map;</td></tr><tr><td class="codekolom">5341</td><td class="codekolom">5404</td><td class="bredecode"> lodash.max = max;</td></tr><tr><td class="codekolom">5342</td><td class="codekolom">5405</td><td class="bredecode"> lodash.memoize = memoize;</td></tr><tr><td class="codekolom">5343</td><td class="codekolom">5406</td><td class="bredecode"> lodash.merge = merge;</td></tr><tr><td class="codekolom">5344</td><td class="codekolom">5407</td><td class="bredecode"> lodash.min = min;</td></tr><tr><td class="codekolom">5345</td><td class="codekolom">5408</td><td class="bredecode"> lodash.omit = omit;</td></tr><tr><td class="codekolom">5346</td><td class="codekolom">5409</td><td class="bredecode"> lodash.once = once;</td></tr><tr><td class="codekolom">5347</td><td class="codekolom">5410</td><td class="bredecode"> lodash.pairs = pairs;</td></tr><tr><td class="codekolom">5348</td><td class="codekolom">5411</td><td class="bredecode"> lodash.partial = partial;</td></tr><tr><td class="codekolom">5349</td><td class="codekolom">5412</td><td class="bredecode"> lodash.partialRight = partialRight;</td></tr><tr><td class="codekolom">5350</td><td class="codekolom">5413</td><td class="bredecode"> lodash.pick = pick;</td></tr><tr><td class="codekolom">5351</td><td class="codekolom">5414</td><td class="bredecode"> lodash.pluck = pluck;</td></tr><tr><td class="codekolom">5352</td><td class="codekolom">5415</td><td class="bredecode"> lodash.range = range;</td></tr><tr><td class="codekolom">5353</td><td class="codekolom">5416</td><td class="bredecode"> lodash.reject = reject;</td></tr><tr><td class="codekolom">5354</td><td class="codekolom">5417</td><td class="bredecode"> lodash.rest = rest;</td></tr><tr class="add"><td class="codekolom"></td><td class="codekolom">5418</td><td class="bredecode">+ lodash.restBy = restBy;</td></tr><tr><td class="codekolom">5355</td><td class="codekolom">5419</td><td class="bredecode"> lodash.shuffle = shuffle;</td></tr><tr><td class="codekolom">5356</td><td class="codekolom">5420</td><td class="bredecode"> lodash.sortBy = sortBy;</td></tr><tr><td class="codekolom">5357</td><td class="codekolom">5421</td><td class="bredecode"> lodash.tap = tap;</td></tr><tr class="add"><td class="codekolom"></td><td class="codekolom">5422</td><td class="bredecode">+ lodash.take = take;</td></tr><tr><td class="codekolom">5358</td><td class="codekolom">5423</td><td class="bredecode"> lodash.throttle = throttle;</td></tr><tr><td class="codekolom">5359</td><td class="codekolom">5424</td><td class="bredecode"> lodash.times = times;</td></tr><tr><td class="codekolom">5360</td><td class="codekolom">5425</td><td class="bredecode"> lodash.toArray = toArray;</td></tr><tr><td class="codekolom">5361</td><td class="codekolom">5426</td><td class="bredecode"> lodash.transform = transform;</td></tr><tr><td class="codekolom">5362</td><td class="codekolom">5427</td><td class="bredecode"> lodash.union = union;</td></tr><tr><td class="codekolom">5363</td><td class="codekolom">5428</td><td class="bredecode"> lodash.uniq = uniq;</td></tr><tr><td class="codekolom">5364</td><td class="codekolom">5429</td><td class="bredecode"> lodash.unzip = unzip;</td></tr><tr><td class="codekolom">5365</td><td class="codekolom">5430</td><td class="bredecode"> lodash.values = values;</td></tr><tr><td class="codekolom">5366</td><td class="codekolom">5431</td><td class="bredecode"> lodash.where = where;</td></tr><tr><td class="codekolom">5367</td><td class="codekolom">5432</td><td class="bredecode"> lodash.without = without;</td></tr><tr><td class="codekolom">5368</td><td class="codekolom">5433</td><td class="bredecode"> lodash.wrap = wrap;</td></tr><tr><td class="codekolom">5369</td><td class="codekolom">5434</td><td class="bredecode"> lodash.zip = zip;</td></tr><tr><td class="codekolom">5370</td><td class="codekolom">5435</td><td class="bredecode"> lodash.zipObject = zipObject;</td></tr><tr><td class="codekolom">5371</td><td class="codekolom">5436</td><td class="bredecode"> </td></tr><tr><td class="codekolom">5372</td><td class="codekolom">5437</td><td class="bredecode"> // add aliases</td></tr><tr><td class="codekolom">5373</td><td class="codekolom">5438</td><td class="bredecode"> lodash.collect = map;</td></tr><tr class="del"><td class="codekolom">5374</td><td class="codekolom"></td><td class="bredecode">- lodash.drop = rest;</td></tr><tr><td class="codekolom">5375</td><td class="codekolom">5439</td><td class="bredecode"> lodash.each = forEach;</td></tr><tr><td class="codekolom">5376</td><td class="codekolom">5440</td><td class="bredecode"> lodash.extend = assign;</td></tr><tr><td class="codekolom">5377</td><td class="codekolom">5441</td><td class="bredecode"> lodash.methods = functions;</td></tr><tr><td class="codekolom">5378</td><td class="codekolom">5442</td><td class="bredecode"> lodash.object = zipObject;</td></tr><tr><td class="codekolom">5379</td><td class="codekolom">5443</td><td class="bredecode"> lodash.select = filter;</td></tr><tr class="del"><td class="codekolom">5380</td><td class="codekolom"></td><td class="bredecode">- lodash.tail = rest;</td></tr><tr><td class="codekolom">5381</td><td class="codekolom">5444</td><td class="bredecode"> lodash.unique = uniq;</td></tr><tr><td class="codekolom">5382</td><td class="codekolom">5445</td><td class="bredecode"> </td></tr><tr><td class="codekolom">5383</td><td class="codekolom">5446</td><td class="bredecode"> // add functions to `lodash.prototype`</td></tr><tr><td class="codekolom">5384</td><td class="codekolom">5447</td><td class="bredecode"> mixin(lodash);</td></tr><tr><td class="codekolom">5385</td><td class="codekolom">5448</td><td class="bredecode"> </td></tr><tr><td class="codekolom">5386</td><td class="codekolom">5449</td><td class="bredecode"> // add Underscore compat</td></tr><tr><td class="codekolom">5387</td><td class="codekolom">5450</td><td class="bredecode"> lodash.chain = lodash;</td></tr><tr><td class="codekolom">5388</td><td class="codekolom">5451</td><td class="bredecode"> lodash.prototype.chain = function() { return this; };</td></tr><tr><td class="codekolom">5389</td><td class="codekolom">5452</td><td class="bredecode"> </td></tr><tr><td class="codekolom">5390</td><td class="codekolom">5453</td><td class="bredecode"> /*--------------------------------------------------------------------------*/</td></tr><tr><td class="codekolom">5391</td><td class="codekolom">5454</td><td class="bredecode"> </td></tr><tr><td class="codekolom">5392</td><td class="codekolom">5455</td><td class="bredecode"> // add functions that return unwrapped values when chaining</td></tr><tr><td class="codekolom">5393</td><td class="codekolom">5456</td><td class="bredecode"> lodash.clone = clone;</td></tr><tr><td class="codekolom">5394</td><td class="codekolom">5457</td><td class="bredecode"> lodash.cloneDeep = cloneDeep;</td></tr><tr><td class="codekolom">5395</td><td class="codekolom">5458</td><td class="bredecode"> lodash.contains = contains;</td></tr><tr><td class="codekolom">5396</td><td class="codekolom">5459</td><td class="bredecode"> lodash.escape = escape;</td></tr><tr><td class="codekolom">5397</td><td class="codekolom">5460</td><td class="bredecode"> lodash.every = every;</td></tr><tr><td class="codekolom">5398</td><td class="codekolom">5461</td><td class="bredecode"> lodash.find = find;</td></tr><tr><td class="codekolom">5399</td><td class="codekolom">5462</td><td class="bredecode"> lodash.findIndex = findIndex;</td></tr><tr><td class="codekolom">5400</td><td class="codekolom">5463</td><td class="bredecode"> lodash.findKey = findKey;</td></tr><tr><td class="codekolom">5401</td><td class="codekolom">5464</td><td class="bredecode"> lodash.has = has;</td></tr><tr><td class="codekolom">5402</td><td class="codekolom">5465</td><td class="bredecode"> lodash.identity = identity;</td></tr><tr><td class="codekolom">5403</td><td class="codekolom">5466</td><td class="bredecode"> lodash.indexOf = indexOf;</td></tr><tr><td class="codekolom">5404</td><td class="codekolom">5467</td><td class="bredecode"> lodash.isArguments = isArguments;</td></tr><tr><td class="codekolom">5405</td><td class="codekolom">5468</td><td class="bredecode"> lodash.isArray = isArray;</td></tr><tr><td class="codekolom">5406</td><td class="codekolom">5469</td><td class="bredecode"> lodash.isBoolean = isBoolean;</td></tr><tr><td class="codekolom">5407</td><td class="codekolom">5470</td><td class="bredecode"> lodash.isDate = isDate;</td></tr><tr><td class="codekolom">5408</td><td class="codekolom">5471</td><td class="bredecode"> lodash.isElement = isElement;</td></tr><tr><td class="codekolom">5409</td><td class="codekolom">5472</td><td class="bredecode"> lodash.isEmpty = isEmpty;</td></tr><tr><td class="codekolom">5410</td><td class="codekolom">5473</td><td class="bredecode"> lodash.isEqual = isEqual;</td></tr><tr><td class="codekolom">5411</td><td class="codekolom">5474</td><td class="bredecode"> lodash.isFinite = isFinite;</td></tr><tr><td class="codekolom">5412</td><td class="codekolom">5475</td><td class="bredecode"> lodash.isFunction = isFunction;</td></tr><tr><td class="codekolom">5413</td><td class="codekolom">5476</td><td class="bredecode"> lodash.isNaN = isNaN;</td></tr><tr><td class="codekolom">5414</td><td class="codekolom">5477</td><td class="bredecode"> lodash.isNull = isNull;</td></tr><tr><td class="codekolom">5415</td><td class="codekolom">5478</td><td class="bredecode"> lodash.isNumber = isNumber;</td></tr><tr><td class="codekolom">5416</td><td class="codekolom">5479</td><td class="bredecode"> lodash.isObject = isObject;</td></tr><tr><td class="codekolom">5417</td><td class="codekolom">5480</td><td class="bredecode"> lodash.isPlainObject = isPlainObject;</td></tr><tr><td class="codekolom">5418</td><td class="codekolom">5481</td><td class="bredecode"> lodash.isRegExp = isRegExp;</td></tr><tr><td class="codekolom">5419</td><td class="codekolom">5482</td><td class="bredecode"> lodash.isString = isString;</td></tr><tr><td class="codekolom">5420</td><td class="codekolom">5483</td><td class="bredecode"> lodash.isUndefined = isUndefined;</td></tr><tr><td class="codekolom">5421</td><td class="codekolom">5484</td><td class="bredecode"> lodash.lastIndexOf = lastIndexOf;</td></tr><tr><td class="codekolom">5422</td><td class="codekolom">5485</td><td class="bredecode"> lodash.mixin = mixin;</td></tr><tr><td class="codekolom">5423</td><td class="codekolom">5486</td><td class="bredecode"> lodash.noConflict = noConflict;</td></tr><tr><td class="codekolom">5424</td><td class="codekolom">5487</td><td class="bredecode"> lodash.parseInt = parseInt;</td></tr><tr><td class="codekolom">5425</td><td class="codekolom">5488</td><td class="bredecode"> lodash.random = random;</td></tr><tr><td class="codekolom">5426</td><td class="codekolom">5489</td><td class="bredecode"> lodash.reduce = reduce;</td></tr><tr><td class="codekolom">5427</td><td class="codekolom">5490</td><td class="bredecode"> lodash.reduceRight = reduceRight;</td></tr><tr><td class="codekolom">5428</td><td class="codekolom">5491</td><td class="bredecode"> lodash.result = result;</td></tr><tr><td class="codekolom">5429</td><td class="codekolom">5492</td><td class="bredecode"> lodash.runInContext = runInContext;</td></tr><tr><td class="codekolom">5430</td><td class="codekolom">5493</td><td class="bredecode"> lodash.size = size;</td></tr><tr><td class="codekolom">5431</td><td class="codekolom">5494</td><td class="bredecode"> lodash.some = some;</td></tr><tr><td class="codekolom">5432</td><td class="codekolom">5495</td><td class="bredecode"> lodash.sortedIndex = sortedIndex;</td></tr><tr><td class="codekolom">5433</td><td class="codekolom">5496</td><td class="bredecode"> lodash.template = template;</td></tr><tr><td class="codekolom">5434</td><td class="codekolom">5497</td><td class="bredecode"> lodash.unescape = unescape;</td></tr><tr><td class="codekolom">5435</td><td class="codekolom">5498</td><td class="bredecode"> lodash.uniqueId = uniqueId;</td></tr><tr><td class="codekolom">5436</td><td class="codekolom">5499</td><td class="bredecode"> </td></tr><tr><td class="codekolom">5437</td><td class="codekolom">5500</td><td class="bredecode"> // add aliases</td></tr><tr><td class="codekolom">5438</td><td class="codekolom">5501</td><td class="bredecode"> lodash.all = every;</td></tr><tr><td class="codekolom">5439</td><td class="codekolom">5502</td><td class="bredecode"> lodash.any = some;</td></tr><tr><td class="codekolom">5440</td><td class="codekolom">5503</td><td class="bredecode"> lodash.detect = find;</td></tr><tr><td class="codekolom">5441</td><td class="codekolom">5504</td><td class="bredecode"> lodash.findWhere = find;</td></tr><tr><td class="codekolom">5442</td><td class="codekolom">5505</td><td class="bredecode"> lodash.foldl = reduce;</td></tr><tr><td class="codekolom">5443</td><td class="codekolom">5506</td><td class="bredecode"> lodash.foldr = reduceRight;</td></tr><tr><td class="codekolom">5444</td><td class="codekolom">5507</td><td class="bredecode"> lodash.include = contains;</td></tr><tr><td class="codekolom">5445</td><td class="codekolom">5508</td><td class="bredecode"> lodash.inject = reduce;</td></tr><tr><td class="codekolom">5446</td><td class="codekolom">5509</td><td class="bredecode"> </td></tr><tr><td class="codekolom">5447</td><td class="codekolom">5510</td><td class="bredecode"> forOwn(lodash, function(func, methodName) {</td></tr><tr><td class="codekolom">5448</td><td class="codekolom">5511</td><td class="bredecode"> if (!lodash.prototype[methodName]) {</td></tr><tr><td class="codekolom">5449</td><td class="codekolom">5512</td><td class="bredecode"> lodash.prototype[methodName] = function() {</td></tr><tr><td class="codekolom">5450</td><td class="codekolom">5513</td><td class="bredecode"> var args = [this.__wrapped__];</td></tr><tr><td class="codekolom">5451</td><td class="codekolom">5514</td><td class="bredecode"> push.apply(args, arguments);</td></tr><tr><td class="codekolom">5452</td><td class="codekolom">5515</td><td class="bredecode"> return func.apply(lodash, args);</td></tr><tr><td class="codekolom">5453</td><td class="codekolom">5516</td><td class="bredecode"> };</td></tr><tr><td class="codekolom">5454</td><td class="codekolom">5517</td><td class="bredecode"> }</td></tr><tr><td class="codekolom">5455</td><td class="codekolom">5518</td><td class="bredecode"> });</td></tr><tr><td class="codekolom">5456</td><td class="codekolom">5519</td><td class="bredecode"> </td></tr><tr><td class="codekolom">5457</td><td class="codekolom">5520</td><td class="bredecode"> /*--------------------------------------------------------------------------*/</td></tr><tr><td class="codekolom">5458</td><td class="codekolom">5521</td><td class="bredecode"> </td></tr><tr><td class="codekolom">5459</td><td class="codekolom">5522</td><td class="bredecode"> // add functions capable of returning wrapped and unwrapped values when chaining</td></tr><tr><td class="codekolom">5460</td><td class="codekolom">5523</td><td class="bredecode"> lodash.first = first;</td></tr><tr><td class="codekolom">5461</td><td class="codekolom">5524</td><td class="bredecode"> lodash.last = last;</td></tr><tr><td class="codekolom">5462</td><td class="codekolom">5525</td><td class="bredecode"> </td></tr><tr><td class="codekolom">5463</td><td class="codekolom">5526</td><td class="bredecode"> // add aliases</td></tr><tr class="del"><td class="codekolom">5464</td><td class="codekolom"></td><td class="bredecode">- lodash.take = first;</td></tr><tr class="del"><td class="codekolom">5465</td><td class="codekolom"></td><td class="bredecode">- lodash.head = first;</td></tr><tr><td class="codekolom">5466</td><td class="codekolom">5527</td><td class="bredecode"> </td></tr><tr><td class="codekolom">5467</td><td class="codekolom">5528</td><td class="bredecode"> forOwn(lodash, function(func, methodName) {</td></tr><tr><td class="codekolom">5468</td><td class="codekolom">5529</td><td class="bredecode"> if (!lodash.prototype[methodName]) {</td></tr><tr><td class="codekolom">5469</td><td class="codekolom">5530</td><td class="bredecode"> lodash.prototype[methodName]= function(callback, thisArg) {</td></tr><tr><td class="codekolom">5470</td><td class="codekolom">5531</td><td class="bredecode"> var result = func(this.__wrapped__, callback, thisArg);</td></tr><tr><td class="codekolom">5471</td><td class="codekolom">5532</td><td class="bredecode"> return callback == null || (thisArg &amp;&amp; typeof callback != 'function')</td></tr><tr><td class="codekolom">5472</td><td class="codekolom">5533</td><td class="bredecode"> ? result</td></tr><tr><td class="codekolom">5473</td><td class="codekolom">5534</td><td class="bredecode"> : new lodashWrapper(result);</td></tr><tr><td class="codekolom">5474</td><td class="codekolom">5535</td><td class="bredecode"> };</td></tr><tr><td class="codekolom">5475</td><td class="codekolom">5536</td><td class="bredecode"> }</td></tr><tr><td class="codekolom">5476</td><td class="codekolom">5537</td><td class="bredecode"> });</td></tr><tr><td class="codekolom">5477</td><td class="codekolom">5538</td><td class="bredecode"> </td></tr><tr><td class="codekolom">5478</td><td class="codekolom">5539</td><td class="bredecode"> /*--------------------------------------------------------------------------*/</td></tr><tr><td class="codekolom">5479</td><td class="codekolom">5540</td><td class="bredecode"> </td></tr><tr><td class="codekolom">5480</td><td class="codekolom">5541</td><td class="bredecode"> /**</td></tr><tr><td class="codekolom">5481</td><td class="codekolom">5542</td><td class="bredecode"> * The semantic version number.</td></tr><tr><td class="codekolom">5482</td><td class="codekolom">5543</td><td class="bredecode"> *</td></tr><tr><td class="codekolom">5483</td><td class="codekolom">5544</td><td class="bredecode"> * @static</td></tr><tr><td class="codekolom">5484</td><td class="codekolom">5545</td><td class="bredecode"> * @memberOf _</td></tr><tr><td class="codekolom">5485</td><td class="codekolom">5546</td><td class="bredecode"> * @type String</td></tr><tr><td class="codekolom">5486</td><td class="codekolom">5547</td><td class="bredecode"> */</td></tr><tr><td class="codekolom">5487</td><td class="codekolom">5548</td><td class="bredecode"> lodash.VERSION = '1.3.0';</td></tr><tr><td class="codekolom">5488</td><td class="codekolom">5549</td><td class="bredecode"> </td></tr><tr><td class="codekolom">5489</td><td class="codekolom">5550</td><td class="bredecode"> // add "Chaining" functions to the wrapper</td></tr><tr><td class="codekolom">5490</td><td class="codekolom">5551</td><td class="bredecode"> lodash.prototype.toString = wrapperToString;</td></tr><tr><td class="codekolom">5491</td><td class="codekolom">5552</td><td class="bredecode"> lodash.prototype.value = wrapperValueOf;</td></tr><tr><td class="codekolom">5492</td><td class="codekolom">5553</td><td class="bredecode"> lodash.prototype.valueOf = wrapperValueOf;</td></tr><tr><td class="codekolom">5493</td><td class="codekolom">5554</td><td class="bredecode"> </td></tr><tr><td class="codekolom">5494</td><td class="codekolom">5555</td><td class="bredecode"> // add `Array` functions that return unwrapped values</td></tr><tr class="del"><td class="codekolom">5495</td><td class="codekolom"></td><td class="bredecode">- forEach(['join', 'pop', 'shift'], function(methodName) {</td></tr><tr class="add"><td class="codekolom"></td><td class="codekolom">5556</td><td class="bredecode">+ forEach(function(methodName) {</td></tr><tr><td class="codekolom">5496</td><td class="codekolom">5557</td><td class="bredecode"> var func = arrayRef[methodName];</td></tr><tr><td class="codekolom">5497</td><td class="codekolom">5558</td><td class="bredecode"> lodash.prototype[methodName] = function() {</td></tr><tr><td class="codekolom">5498</td><td class="codekolom">5559</td><td class="bredecode"> return func.apply(this.__wrapped__, arguments);</td></tr><tr><td class="codekolom">5499</td><td class="codekolom">5560</td><td class="bredecode"> };</td></tr><tr class="del"><td class="codekolom">5500</td><td class="codekolom"></td><td class="bredecode">- });</td></tr><tr class="add"><td class="codekolom"></td><td class="codekolom">5561</td><td class="bredecode">+ }, ['join', 'pop', 'shift']);</td></tr><tr><td class="codekolom">5501</td><td class="codekolom">5562</td><td class="bredecode"> </td></tr><tr><td class="codekolom">5502</td><td class="codekolom">5563</td><td class="bredecode"> // add `Array` functions that return the wrapped value</td></tr><tr class="del"><td class="codekolom">5503</td><td class="codekolom"></td><td class="bredecode">- forEach(['push', 'reverse', 'sort', 'unshift'], function(methodName) {</td></tr><tr class="add"><td class="codekolom"></td><td class="codekolom">5564</td><td class="bredecode">+ forEach(function(methodName) {</td></tr><tr><td class="codekolom">5504</td><td class="codekolom">5565</td><td class="bredecode"> var func = arrayRef[methodName];</td></tr><tr><td class="codekolom">5505</td><td class="codekolom">5566</td><td class="bredecode"> lodash.prototype[methodName] = function() {</td></tr><tr><td class="codekolom">5506</td><td class="codekolom">5567</td><td class="bredecode"> func.apply(this.__wrapped__, arguments);</td></tr><tr><td class="codekolom">5507</td><td class="codekolom">5568</td><td class="bredecode"> return this;</td></tr><tr><td class="codekolom">5508</td><td class="codekolom">5569</td><td class="bredecode"> };</td></tr><tr class="del"><td class="codekolom">5509</td><td class="codekolom"></td><td class="bredecode">- });</td></tr><tr class="add"><td class="codekolom"></td><td class="codekolom">5570</td><td class="bredecode">+ }, ['push', 'reverse', 'sort', 'unshift']);</td></tr><tr><td class="codekolom">5510</td><td class="codekolom">5571</td><td class="bredecode"> </td></tr><tr><td class="codekolom">5511</td><td class="codekolom">5572</td><td class="bredecode"> // add `Array` functions that return new wrapped values</td></tr><tr class="del"><td class="codekolom">5512</td><td class="codekolom"></td><td class="bredecode">- forEach(['concat', 'slice', 'splice'], function(methodName) {</td></tr><tr class="add"><td class="codekolom"></td><td class="codekolom">5573</td><td class="bredecode">+ forEach(function(methodName) {</td></tr><tr><td class="codekolom">5513</td><td class="codekolom">5574</td><td class="bredecode"> var func = arrayRef[methodName];</td></tr><tr><td class="codekolom">5514</td><td class="codekolom">5575</td><td class="bredecode"> lodash.prototype[methodName] = function() {</td></tr><tr><td class="codekolom">5515</td><td class="codekolom">5576</td><td class="bredecode"> return new lodashWrapper(func.apply(this.__wrapped__, arguments));</td></tr><tr><td class="codekolom">5516</td><td class="codekolom">5577</td><td class="bredecode"> };</td></tr><tr class="del"><td class="codekolom">5517</td><td class="codekolom"></td><td class="bredecode">- });</td></tr><tr class="add"><td class="codekolom"></td><td class="codekolom">5578</td><td class="bredecode">+ }, ['concat', 'slice', 'splice']);</td></tr><tr class="add"><td class="codekolom"></td><td class="codekolom">5579</td><td class="bredecode">+ </td></tr><tr class="add"><td class="codekolom"></td><td class="codekolom">5580</td><td class="bredecode">+ (function(){</td></tr><tr class="add"><td class="codekolom"></td><td class="codekolom">5581</td><td class="bredecode">+ //+ exposeFunction :: f -&gt; Bool</td></tr><tr class="add"><td class="codekolom"></td><td class="codekolom">5582</td><td class="bredecode">+ var exposeFunction = function(f) {</td></tr><tr class="add"><td class="codekolom"></td><td class="codekolom">5583</td><td class="bredecode">+ var omit = ['expose'];</td></tr><tr class="add"><td class="codekolom"></td><td class="codekolom">5584</td><td class="bredecode">+ return omit.indexOf(f) === -1 ? true : false;</td></tr><tr class="add"><td class="codekolom"></td><td class="codekolom">5585</td><td class="bredecode">+ }</td></tr><tr class="add"><td class="codekolom"></td><td class="codekolom">5586</td><td class="bredecode">+ </td></tr><tr class="add"><td class="codekolom"></td><td class="codekolom">5587</td><td class="bredecode">+ //+ expose :: a -&gt; IO</td></tr><tr class="add"><td class="codekolom"></td><td class="codekolom">5588</td><td class="bredecode">+ , expose = function(ns) {</td></tr><tr class="add"><td class="codekolom"></td><td class="codekolom">5589</td><td class="bredecode">+ var f;</td></tr><tr class="add"><td class="codekolom"></td><td class="codekolom">5590</td><td class="bredecode">+ ns = ns || window;</td></tr><tr class="add"><td class="codekolom"></td><td class="codekolom">5591</td><td class="bredecode">+ for (f in lodash) {</td></tr><tr class="add"><td class="codekolom"></td><td class="codekolom">5592</td><td class="bredecode">+ if (exposeFunction(f) &amp;&amp; lodash.hasOwnProperty(f)) {</td></tr><tr class="add"><td class="codekolom"></td><td class="codekolom">5593</td><td class="bredecode">+ ns[f] = lodash[f];</td></tr><tr class="add"><td class="codekolom"></td><td class="codekolom">5594</td><td class="bredecode">+ }</td></tr><tr class="add"><td class="codekolom"></td><td class="codekolom">5595</td><td class="bredecode">+ }</td></tr><tr class="add"><td class="codekolom"></td><td class="codekolom">5596</td><td class="bredecode">+ }</td></tr><tr class="add"><td class="codekolom"></td><td class="codekolom">5597</td><td class="bredecode">+ </td></tr><tr class="add"><td class="codekolom"></td><td class="codekolom">5598</td><td class="bredecode">+ //+ decorateScoreUnderWithExpose :: IO</td></tr><tr class="add"><td class="codekolom"></td><td class="codekolom">5599</td><td class="bredecode">+ , decorateScoreUnderWithExpose = (function() {</td></tr><tr class="add"><td class="codekolom"></td><td class="codekolom">5600</td><td class="bredecode">+ lodash['expose'] = expose;</td></tr><tr class="add"><td class="codekolom"></td><td class="codekolom">5601</td><td class="bredecode">+ })()</td></tr><tr class="add"><td class="codekolom"></td><td class="codekolom">5602</td><td class="bredecode">+ ;</td></tr><tr class="add"><td class="codekolom"></td><td class="codekolom">5603</td><td class="bredecode">+ })();</td></tr><tr><td class="codekolom">5518</td><td class="codekolom">5604</td><td class="bredecode"> </td></tr><tr><td class="codekolom">5519</td><td class="codekolom">5605</td><td class="bredecode"> return lodash;</td></tr><tr><td class="codekolom">5520</td><td class="codekolom">5606</td><td class="bredecode"> }</td></tr><tr><td class="codekolom">5521</td><td class="codekolom">5607</td><td class="bredecode"> </td></tr><tr><td class="codekolom">5522</td><td class="codekolom">5608</td><td class="bredecode"> /*--------------------------------------------------------------------------*/</td></tr><tr><td class="codekolom">5523</td><td class="codekolom">5609</td><td class="bredecode"> </td></tr><tr><td class="codekolom">5524</td><td class="codekolom">5610</td><td class="bredecode"> // expose Lo-Dash</td></tr><tr><td class="codekolom">5525</td><td class="codekolom">5611</td><td class="bredecode"> var _ = runInContext();</td></tr><tr><td class="codekolom">5526</td><td class="codekolom">5612</td><td class="bredecode"> </td></tr><tr><td class="codekolom">5527</td><td class="codekolom">5613</td><td class="bredecode"> // some AMD build optimizers, like r.js, check for specific condition patterns like the following:</td></tr><tr><td class="codekolom">5528</td><td class="codekolom">5614</td><td class="bredecode"> if (typeof define == 'function' &amp;&amp; typeof define.amd == 'object' &amp;&amp; define.amd) {</td></tr><tr><td class="codekolom">5529</td><td class="codekolom">5615</td><td class="bredecode"> // Expose Lo-Dash to the global object even when an AMD loader is present in</td></tr><tr><td class="codekolom">5530</td><td class="codekolom">5616</td><td class="bredecode"> // case Lo-Dash was injected by a third-party script and not intended to be</td></tr><tr><td class="codekolom">5531</td><td class="codekolom">5617</td><td class="bredecode"> // loaded as a module. The global assignment can be reverted in the Lo-Dash</td></tr><tr><td class="codekolom">5532</td><td class="codekolom">5618</td><td class="bredecode"> // module via its `noConflict()` method.</td></tr><tr><td class="codekolom">5533</td><td class="codekolom">5619</td><td class="bredecode"> window._ = _;</td></tr><tr><td class="codekolom">5534</td><td class="codekolom">5620</td><td class="bredecode"> </td></tr><tr><td class="codekolom">5535</td><td class="codekolom">5621</td><td class="bredecode"> // define as an anonymous module so, through path mapping, it can be</td></tr><tr><td class="codekolom">5536</td><td class="codekolom">5622</td><td class="bredecode"> // referenced as the "underscore" module</td></tr><tr><td class="codekolom">5537</td><td class="codekolom">5623</td><td class="bredecode"> define(function() {</td></tr><tr><td class="codekolom">5538</td><td class="codekolom">5624</td><td class="bredecode"> return _;</td></tr><tr><td class="codekolom">5539</td><td class="codekolom">5625</td><td class="bredecode"> });</td></tr><tr><td class="codekolom">5540</td><td class="codekolom">5626</td><td class="bredecode"> }</td></tr><tr><td class="codekolom">5541</td><td class="codekolom">5627</td><td class="bredecode"> // check for `exports` after `define` in case a build optimizer adds an `exports` object</td></tr><tr><td class="codekolom">5542</td><td class="codekolom">5628</td><td class="bredecode"> else if (freeExports &amp;&amp; !freeExports.nodeType) {</td></tr><tr><td class="codekolom">5543</td><td class="codekolom">5629</td><td class="bredecode"> // in Node.js or RingoJS v0.8.0+</td></tr><tr><td class="codekolom">5544</td><td class="codekolom">5630</td><td class="bredecode"> if (freeModule) {</td></tr><tr><td class="codekolom">5545</td><td class="codekolom">5631</td><td class="bredecode"> (freeModule.exports = _)._ = _;</td></tr><tr><td class="codekolom">5546</td><td class="codekolom">5632</td><td class="bredecode"> }</td></tr><tr><td class="codekolom">5547</td><td class="codekolom">5633</td><td class="bredecode"> // in Narwhal or RingoJS v0.7.0-</td></tr><tr><td class="codekolom">5548</td><td class="codekolom">5634</td><td class="bredecode"> else {</td></tr><tr><td class="codekolom">5549</td><td class="codekolom">5635</td><td class="bredecode"> freeExports._ = _;</td></tr><tr><td class="codekolom">5550</td><td class="codekolom">5636</td><td class="bredecode"> }</td></tr><tr><td class="codekolom">5551</td><td class="codekolom">5637</td><td class="bredecode"> }</td></tr><tr><td class="codekolom">5552</td><td class="codekolom">5638</td><td class="bredecode"> else {</td></tr><tr><td class="codekolom">5553</td><td class="codekolom">5639</td><td class="bredecode"> // in a browser or Rhino</td></tr><tr><td class="codekolom">5554</td><td class="codekolom">5640</td><td class="bredecode"> window._ = _;</td></tr><tr><td class="codekolom">5555</td><td class="codekolom">5641</td><td class="bredecode"> }</td></tr><tr><td class="codekolom">5556</td><td class="codekolom">5642</td><td class="bredecode"> }(this));</td></tr></tbody>
</table>
</body>
</html>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment