jashkenas/underscore

View on GitHub
docs/modules/_createIndexFinder.html

Summary

Maintainability
Test Coverage

<!DOCTYPE html>

<html>
<head>
  <title>_createIndexFinder.js</title>
  <meta http-equiv="content-type" content="text/html; charset=UTF-8">
  <meta name="viewport" content="width=device-width, target-densitydpi=160dpi, initial-scale=1.0; maximum-scale=1.0; user-scalable=0;">
  <link rel="stylesheet" media="all" href="../docco.css" />
</head>
<body>
  <div id="container">
    <div id="background"></div>
    
      <ul id="jump_to">
        <li>
          <a class="large" href="javascript:void(0);">Jump To &hellip;</a>
          <a class="small" href="javascript:void(0);">+</a>
          <div id="jump_wrapper">
          <div id="jump_page_wrapper">
            <div id="jump_page">
              
                
                <a class="source" href="_baseCreate.html">
                  modules/_baseCreate.js
                </a>
              
                
                <a class="source" href="_baseIteratee.html">
                  modules/_baseIteratee.js
                </a>
              
                
                <a class="source" href="_cb.html">
                  modules/_cb.js
                </a>
              
                
                <a class="source" href="_chainResult.html">
                  modules/_chainResult.js
                </a>
              
                
                <a class="source" href="_collectNonEnumProps.html">
                  modules/_collectNonEnumProps.js
                </a>
              
                
                <a class="source" href="_createAssigner.html">
                  modules/_createAssigner.js
                </a>
              
                
                <a class="source" href="_createEscaper.html">
                  modules/_createEscaper.js
                </a>
              
                
                <a class="source" href="_createIndexFinder.html">
                  modules/_createIndexFinder.js
                </a>
              
                
                <a class="source" href="_createPredicateIndexFinder.html">
                  modules/_createPredicateIndexFinder.js
                </a>
              
                
                <a class="source" href="_createReduce.html">
                  modules/_createReduce.js
                </a>
              
                
                <a class="source" href="_createSizePropertyCheck.html">
                  modules/_createSizePropertyCheck.js
                </a>
              
                
                <a class="source" href="_deepGet.html">
                  modules/_deepGet.js
                </a>
              
                
                <a class="source" href="_escapeMap.html">
                  modules/_escapeMap.js
                </a>
              
                
                <a class="source" href="_executeBound.html">
                  modules/_executeBound.js
                </a>
              
                
                <a class="source" href="_flatten.html">
                  modules/_flatten.js
                </a>
              
                
                <a class="source" href="_getByteLength.html">
                  modules/_getByteLength.js
                </a>
              
                
                <a class="source" href="_getLength.html">
                  modules/_getLength.js
                </a>
              
                
                <a class="source" href="_group.html">
                  modules/_group.js
                </a>
              
                
                <a class="source" href="_has.html">
                  modules/_has.js
                </a>
              
                
                <a class="source" href="_hasObjectTag.html">
                  modules/_hasObjectTag.js
                </a>
              
                
                <a class="source" href="_isArrayLike.html">
                  modules/_isArrayLike.js
                </a>
              
                
                <a class="source" href="_isBufferLike.html">
                  modules/_isBufferLike.js
                </a>
              
                
                <a class="source" href="_keyInObj.html">
                  modules/_keyInObj.js
                </a>
              
                
                <a class="source" href="_methodFingerprint.html">
                  modules/_methodFingerprint.js
                </a>
              
                
                <a class="source" href="_optimizeCb.html">
                  modules/_optimizeCb.js
                </a>
              
                
                <a class="source" href="_setup.html">
                  modules/_setup.js
                </a>
              
                
                <a class="source" href="_shallowProperty.html">
                  modules/_shallowProperty.js
                </a>
              
                
                <a class="source" href="_stringTagBug.html">
                  modules/_stringTagBug.js
                </a>
              
                
                <a class="source" href="_tagTester.html">
                  modules/_tagTester.js
                </a>
              
                
                <a class="source" href="_toBufferView.html">
                  modules/_toBufferView.js
                </a>
              
                
                <a class="source" href="_toPath.html">
                  modules/_toPath.js
                </a>
              
                
                <a class="source" href="_unescapeMap.html">
                  modules/_unescapeMap.js
                </a>
              
                
                <a class="source" href="after.html">
                  modules/after.js
                </a>
              
                
                <a class="source" href="allKeys.html">
                  modules/allKeys.js
                </a>
              
                
                <a class="source" href="before.html">
                  modules/before.js
                </a>
              
                
                <a class="source" href="bind.html">
                  modules/bind.js
                </a>
              
                
                <a class="source" href="bindAll.html">
                  modules/bindAll.js
                </a>
              
                
                <a class="source" href="chain.html">
                  modules/chain.js
                </a>
              
                
                <a class="source" href="chunk.html">
                  modules/chunk.js
                </a>
              
                
                <a class="source" href="clone.html">
                  modules/clone.js
                </a>
              
                
                <a class="source" href="compact.html">
                  modules/compact.js
                </a>
              
                
                <a class="source" href="compose.html">
                  modules/compose.js
                </a>
              
                
                <a class="source" href="constant.html">
                  modules/constant.js
                </a>
              
                
                <a class="source" href="contains.html">
                  modules/contains.js
                </a>
              
                
                <a class="source" href="countBy.html">
                  modules/countBy.js
                </a>
              
                
                <a class="source" href="create.html">
                  modules/create.js
                </a>
              
                
                <a class="source" href="debounce.html">
                  modules/debounce.js
                </a>
              
                
                <a class="source" href="defaults.html">
                  modules/defaults.js
                </a>
              
                
                <a class="source" href="defer.html">
                  modules/defer.js
                </a>
              
                
                <a class="source" href="delay.html">
                  modules/delay.js
                </a>
              
                
                <a class="source" href="difference.html">
                  modules/difference.js
                </a>
              
                
                <a class="source" href="each.html">
                  modules/each.js
                </a>
              
                
                <a class="source" href="escape.html">
                  modules/escape.js
                </a>
              
                
                <a class="source" href="every.html">
                  modules/every.js
                </a>
              
                
                <a class="source" href="extend.html">
                  modules/extend.js
                </a>
              
                
                <a class="source" href="extendOwn.html">
                  modules/extendOwn.js
                </a>
              
                
                <a class="source" href="filter.html">
                  modules/filter.js
                </a>
              
                
                <a class="source" href="find.html">
                  modules/find.js
                </a>
              
                
                <a class="source" href="findIndex.html">
                  modules/findIndex.js
                </a>
              
                
                <a class="source" href="findKey.html">
                  modules/findKey.js
                </a>
              
                
                <a class="source" href="findLastIndex.html">
                  modules/findLastIndex.js
                </a>
              
                
                <a class="source" href="findWhere.html">
                  modules/findWhere.js
                </a>
              
                
                <a class="source" href="first.html">
                  modules/first.js
                </a>
              
                
                <a class="source" href="flatten.html">
                  modules/flatten.js
                </a>
              
                
                <a class="source" href="functions.html">
                  modules/functions.js
                </a>
              
                
                <a class="source" href="get.html">
                  modules/get.js
                </a>
              
                
                <a class="source" href="groupBy.html">
                  modules/groupBy.js
                </a>
              
                
                <a class="source" href="has.html">
                  modules/has.js
                </a>
              
                
                <a class="source" href="identity.html">
                  modules/identity.js
                </a>
              
                
                <a class="source" href="index-all.html">
                  modules/index-all.js
                </a>
              
                
                <a class="source" href="index-default.html">
                  modules/index-default.js
                </a>
              
                
                <a class="source" href="index.html">
                  modules/index.js
                </a>
              
                
                <a class="source" href="indexBy.html">
                  modules/indexBy.js
                </a>
              
                
                <a class="source" href="indexOf.html">
                  modules/indexOf.js
                </a>
              
                
                <a class="source" href="initial.html">
                  modules/initial.js
                </a>
              
                
                <a class="source" href="intersection.html">
                  modules/intersection.js
                </a>
              
                
                <a class="source" href="invert.html">
                  modules/invert.js
                </a>
              
                
                <a class="source" href="invoke.html">
                  modules/invoke.js
                </a>
              
                
                <a class="source" href="isArguments.html">
                  modules/isArguments.js
                </a>
              
                
                <a class="source" href="isArray.html">
                  modules/isArray.js
                </a>
              
                
                <a class="source" href="isArrayBuffer.html">
                  modules/isArrayBuffer.js
                </a>
              
                
                <a class="source" href="isBoolean.html">
                  modules/isBoolean.js
                </a>
              
                
                <a class="source" href="isDataView.html">
                  modules/isDataView.js
                </a>
              
                
                <a class="source" href="isDate.html">
                  modules/isDate.js
                </a>
              
                
                <a class="source" href="isElement.html">
                  modules/isElement.js
                </a>
              
                
                <a class="source" href="isEmpty.html">
                  modules/isEmpty.js
                </a>
              
                
                <a class="source" href="isEqual.html">
                  modules/isEqual.js
                </a>
              
                
                <a class="source" href="isError.html">
                  modules/isError.js
                </a>
              
                
                <a class="source" href="isFinite.html">
                  modules/isFinite.js
                </a>
              
                
                <a class="source" href="isFunction.html">
                  modules/isFunction.js
                </a>
              
                
                <a class="source" href="isMap.html">
                  modules/isMap.js
                </a>
              
                
                <a class="source" href="isMatch.html">
                  modules/isMatch.js
                </a>
              
                
                <a class="source" href="isNaN.html">
                  modules/isNaN.js
                </a>
              
                
                <a class="source" href="isNull.html">
                  modules/isNull.js
                </a>
              
                
                <a class="source" href="isNumber.html">
                  modules/isNumber.js
                </a>
              
                
                <a class="source" href="isObject.html">
                  modules/isObject.js
                </a>
              
                
                <a class="source" href="isRegExp.html">
                  modules/isRegExp.js
                </a>
              
                
                <a class="source" href="isSet.html">
                  modules/isSet.js
                </a>
              
                
                <a class="source" href="isString.html">
                  modules/isString.js
                </a>
              
                
                <a class="source" href="isSymbol.html">
                  modules/isSymbol.js
                </a>
              
                
                <a class="source" href="isTypedArray.html">
                  modules/isTypedArray.js
                </a>
              
                
                <a class="source" href="isUndefined.html">
                  modules/isUndefined.js
                </a>
              
                
                <a class="source" href="isWeakMap.html">
                  modules/isWeakMap.js
                </a>
              
                
                <a class="source" href="isWeakSet.html">
                  modules/isWeakSet.js
                </a>
              
                
                <a class="source" href="iteratee.html">
                  modules/iteratee.js
                </a>
              
                
                <a class="source" href="keys.html">
                  modules/keys.js
                </a>
              
                
                <a class="source" href="last.html">
                  modules/last.js
                </a>
              
                
                <a class="source" href="lastIndexOf.html">
                  modules/lastIndexOf.js
                </a>
              
                
                <a class="source" href="map.html">
                  modules/map.js
                </a>
              
                
                <a class="source" href="mapObject.html">
                  modules/mapObject.js
                </a>
              
                
                <a class="source" href="matcher.html">
                  modules/matcher.js
                </a>
              
                
                <a class="source" href="max.html">
                  modules/max.js
                </a>
              
                
                <a class="source" href="memoize.html">
                  modules/memoize.js
                </a>
              
                
                <a class="source" href="min.html">
                  modules/min.js
                </a>
              
                
                <a class="source" href="mixin.html">
                  modules/mixin.js
                </a>
              
                
                <a class="source" href="negate.html">
                  modules/negate.js
                </a>
              
                
                <a class="source" href="noop.html">
                  modules/noop.js
                </a>
              
                
                <a class="source" href="now.html">
                  modules/now.js
                </a>
              
                
                <a class="source" href="object.html">
                  modules/object.js
                </a>
              
                
                <a class="source" href="omit.html">
                  modules/omit.js
                </a>
              
                
                <a class="source" href="once.html">
                  modules/once.js
                </a>
              
                
                <a class="source" href="pairs.html">
                  modules/pairs.js
                </a>
              
                
                <a class="source" href="partial.html">
                  modules/partial.js
                </a>
              
                
                <a class="source" href="partition.html">
                  modules/partition.js
                </a>
              
                
                <a class="source" href="pick.html">
                  modules/pick.js
                </a>
              
                
                <a class="source" href="pluck.html">
                  modules/pluck.js
                </a>
              
                
                <a class="source" href="property.html">
                  modules/property.js
                </a>
              
                
                <a class="source" href="propertyOf.html">
                  modules/propertyOf.js
                </a>
              
                
                <a class="source" href="random.html">
                  modules/random.js
                </a>
              
                
                <a class="source" href="range.html">
                  modules/range.js
                </a>
              
                
                <a class="source" href="reduce.html">
                  modules/reduce.js
                </a>
              
                
                <a class="source" href="reduceRight.html">
                  modules/reduceRight.js
                </a>
              
                
                <a class="source" href="reject.html">
                  modules/reject.js
                </a>
              
                
                <a class="source" href="rest.html">
                  modules/rest.js
                </a>
              
                
                <a class="source" href="restArguments.html">
                  modules/restArguments.js
                </a>
              
                
                <a class="source" href="result.html">
                  modules/result.js
                </a>
              
                
                <a class="source" href="sample.html">
                  modules/sample.js
                </a>
              
                
                <a class="source" href="shuffle.html">
                  modules/shuffle.js
                </a>
              
                
                <a class="source" href="size.html">
                  modules/size.js
                </a>
              
                
                <a class="source" href="some.html">
                  modules/some.js
                </a>
              
                
                <a class="source" href="sortBy.html">
                  modules/sortBy.js
                </a>
              
                
                <a class="source" href="sortedIndex.html">
                  modules/sortedIndex.js
                </a>
              
                
                <a class="source" href="tap.html">
                  modules/tap.js
                </a>
              
                
                <a class="source" href="template.html">
                  modules/template.js
                </a>
              
                
                <a class="source" href="templateSettings.html">
                  modules/templateSettings.js
                </a>
              
                
                <a class="source" href="throttle.html">
                  modules/throttle.js
                </a>
              
                
                <a class="source" href="times.html">
                  modules/times.js
                </a>
              
                
                <a class="source" href="toArray.html">
                  modules/toArray.js
                </a>
              
                
                <a class="source" href="toPath.html">
                  modules/toPath.js
                </a>
              
                
                <a class="source" href="underscore-array-methods.html">
                  modules/underscore-array-methods.js
                </a>
              
                
                <a class="source" href="underscore.html">
                  modules/underscore.js
                </a>
              
                
                <a class="source" href="unescape.html">
                  modules/unescape.js
                </a>
              
                
                <a class="source" href="union.html">
                  modules/union.js
                </a>
              
                
                <a class="source" href="uniq.html">
                  modules/uniq.js
                </a>
              
                
                <a class="source" href="uniqueId.html">
                  modules/uniqueId.js
                </a>
              
                
                <a class="source" href="unzip.html">
                  modules/unzip.js
                </a>
              
                
                <a class="source" href="values.html">
                  modules/values.js
                </a>
              
                
                <a class="source" href="where.html">
                  modules/where.js
                </a>
              
                
                <a class="source" href="without.html">
                  modules/without.js
                </a>
              
                
                <a class="source" href="wrap.html">
                  modules/wrap.js
                </a>
              
                
                <a class="source" href="zip.html">
                  modules/zip.js
                </a>
              
            </div>
          </div>
        </li>
      </ul>
    
    <ul class="sections">
        
          <li id="title">
              <div class="annotation">
                  <h1>_createIndexFinder.js</h1>
              </div>
          </li>
        
        
        
        <li id="section-1">
            <div class="annotation">
              
              <div class="pilwrap ">
                <a class="pilcrow" href="#section-1">&#182;</a>
              </div>
              
            </div>
            
            <div class="content"><div class='highlight'><pre><span class="hljs-keyword">import</span> getLength <span class="hljs-keyword">from</span> <span class="hljs-string">&#x27;./_getLength.js&#x27;</span>;
<span class="hljs-keyword">import</span> { slice } <span class="hljs-keyword">from</span> <span class="hljs-string">&#x27;./_setup.js&#x27;</span>;
<span class="hljs-keyword">import</span> <span class="hljs-built_in">isNaN</span> <span class="hljs-keyword">from</span> <span class="hljs-string">&#x27;./isNaN.js&#x27;</span>;</pre></div></div>
            
        </li>
        
        
        <li id="section-2">
            <div class="annotation">
              
              <div class="pilwrap ">
                <a class="pilcrow" href="#section-2">&#182;</a>
              </div>
              <p>Internal function to generate the <code>_.indexOf</code> and <code>_.lastIndexOf</code> functions.</p>

            </div>
            
            <div class="content"><div class='highlight'><pre><span class="hljs-keyword">export</span> <span class="hljs-keyword">default</span> <span class="hljs-keyword">function</span> <span class="hljs-title function_">createIndexFinder</span>(<span class="hljs-params">dir, predicateFind, sortedIndex</span>) {
  <span class="hljs-keyword">return</span> <span class="hljs-keyword">function</span>(<span class="hljs-params">array, item, idx</span>) {
    <span class="hljs-keyword">var</span> i = <span class="hljs-number">0</span>, length = <span class="hljs-title function_">getLength</span>(array);
    <span class="hljs-keyword">if</span> (<span class="hljs-keyword">typeof</span> idx == <span class="hljs-string">&#x27;number&#x27;</span>) {
      <span class="hljs-keyword">if</span> (dir &gt; <span class="hljs-number">0</span>) {
        i = idx &gt;= <span class="hljs-number">0</span> ? idx : <span class="hljs-title class_">Math</span>.<span class="hljs-title function_">max</span>(idx + length, i);
      } <span class="hljs-keyword">else</span> {
        length = idx &gt;= <span class="hljs-number">0</span> ? <span class="hljs-title class_">Math</span>.<span class="hljs-title function_">min</span>(idx + <span class="hljs-number">1</span>, length) : idx + length + <span class="hljs-number">1</span>;
      }
    } <span class="hljs-keyword">else</span> <span class="hljs-keyword">if</span> (sortedIndex &amp;&amp; idx &amp;&amp; length) {
      idx = <span class="hljs-title function_">sortedIndex</span>(array, item);
      <span class="hljs-keyword">return</span> array[idx] === item ? idx : -<span class="hljs-number">1</span>;
    }
    <span class="hljs-keyword">if</span> (item !== item) {
      idx = <span class="hljs-title function_">predicateFind</span>(slice.<span class="hljs-title function_">call</span>(array, i, length), <span class="hljs-built_in">isNaN</span>);
      <span class="hljs-keyword">return</span> idx &gt;= <span class="hljs-number">0</span> ? idx + i : -<span class="hljs-number">1</span>;
    }
    <span class="hljs-keyword">for</span> (idx = dir &gt; <span class="hljs-number">0</span> ? i : length - <span class="hljs-number">1</span>; idx &gt;= <span class="hljs-number">0</span> &amp;&amp; idx &lt; length; idx += dir) {
      <span class="hljs-keyword">if</span> (array[idx] === item) <span class="hljs-keyword">return</span> idx;
    }
    <span class="hljs-keyword">return</span> -<span class="hljs-number">1</span>;
  };
}</pre></div></div>
            
        </li>
        
    </ul>
  </div>
  
  <script src="https://code.jquery.com/jquery-3.4.1.min.js"></script>
  <script>
    // We run a script at page load to inject the links after the fact.
    // It would be more elegant to do this at page generation time, but
    // unfortunately the docco infrastructure doesn't support this very well.
    // Highlighted code is passed along as an unparsed HTML string, which would
    // make this very tricky. In the script below, we exploit the fact that the
    // HTML has already been parsed by the browser.
    (function() {
      // Define a regex for stripping the .html extension from anchor hrefs.
      var extPattern = /\.html$/;
      // Collect all module paths that we have an HTML page for.
      var moduleMap = {};
      $('#jump_page a.source').each(function() {
        // Fortunately, translating anchor hrefs to ES module paths is easy,
        // because both systems work relative to the current file by default.
        var href = $(this).attr('href');
        var path = href.replace(extPattern, '').split('/');
        if (path[0] !== '..') path.unshift('.');
        var normPath = path.join('/');
        // Support both paths with and without extension.
        moduleMap[normPath] = moduleMap[normPath + '.js'] = href;
      });
      // Find all 'from' keywords followed by a string (ES6 import statements).
      $('.hljs-keyword').filter(function() {
        var text = $(this).text();
        return text === 'from' || text === 'import';
      }).next('.hljs-string').each(function() {
        // Finally, for each of these strings, replace it by a link if we have
        // a matching HTML page.
        var text = $(this).text();
        var quote = text[0];
        var path = text.slice(1, -1);
        var matchingDoc = moduleMap[path];
        if (!matchingDoc) return;
        $(this).html(
          quote + '<a href="' + matchingDoc + '">' + path + '</a>' + quote
        );
      });
    }());
  </script>
  
</body>
</html>