<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:2;-o-tab-size:2;tab-size:2;"><code class="language-js" data-lang="js"><span style="display:flex;"><span>(<span style="color:#66d9ef">function</span>() {
</span></span><span style="display:flex;"><span> <span style="color:#75715e">/**
</span></span></span><span style="display:flex;"><span><span style="color:#75715e"> * @return {void}
</span></span></span><span style="display:flex;"><span><span style="color:#75715e"> * @param {array} array of numbers
</span></span></span><span style="display:flex;"><span><span style="color:#75715e"> * @param {int} how many numbers to return
</span></span></span><span style="display:flex;"><span><span style="color:#75715e"> * @param {function} optional callback
</span></span></span><span style="display:flex;"><span><span style="color:#75715e"> */</span>
</span></span><span style="display:flex;"><span> <span style="color:#66d9ef">var</span> <span style="color:#a6e22e">getHighs</span> <span style="color:#f92672">=</span> <span style="color:#66d9ef">function</span>(<span style="color:#a6e22e">data</span>, <span style="color:#a6e22e">returnsize</span>, <span style="color:#a6e22e">callback</span>) {
</span></span><span style="display:flex;"><span> <span style="color:#66d9ef">var</span> <span style="color:#a6e22e">returnsize</span> <span style="color:#f92672">=</span> <span style="color:#a6e22e">returnsize</span> <span style="color:#f92672">&&</span> <span style="color:#f92672">!</span>isNaN(<span style="color:#a6e22e">returnsize</span>) <span style="color:#f92672">?</span> <span style="color:#a6e22e">returnsize</span> <span style="color:#f92672">:</span> <span style="color:#ae81ff">4</span>;
</span></span><span style="display:flex;"><span> <span style="color:#66d9ef">var</span> <span style="color:#a6e22e">min</span> <span style="color:#f92672">=</span> <span style="color:#66d9ef">null</span>, <span style="color:#a6e22e">highs</span> <span style="color:#f92672">=</span> [];
</span></span><span style="display:flex;"><span> <span style="color:#66d9ef">for</span> (<span style="color:#66d9ef">var</span> <span style="color:#a6e22e">i</span><span style="color:#f92672">=</span><span style="color:#ae81ff">0</span>, <span style="color:#a6e22e">len</span><span style="color:#f92672">=</span><span style="color:#a6e22e">data</span>.<span style="color:#a6e22e">length</span>; <span style="color:#a6e22e">i</span> <span style="color:#f92672"><</span> <span style="color:#a6e22e">len</span>; <span style="color:#a6e22e">i</span><span style="color:#f92672">++</span>) {
</span></span><span style="display:flex;"><span> <span style="color:#66d9ef">if</span> (isNaN(<span style="color:#a6e22e">data</span>[<span style="color:#a6e22e">i</span>])) {
</span></span><span style="display:flex;"><span> <span style="color:#66d9ef">continue</span>;
</span></span><span style="display:flex;"><span> }
</span></span><span style="display:flex;"><span> <span style="color:#66d9ef">if</span> (<span style="color:#a6e22e">highs</span>.<span style="color:#a6e22e">length</span> <span style="color:#f92672"><</span> <span style="color:#a6e22e">returnsize</span>) {
</span></span><span style="display:flex;"><span> <span style="color:#a6e22e">highs</span>.<span style="color:#a6e22e">push</span>(<span style="color:#a6e22e">data</span>[<span style="color:#a6e22e">i</span>]);
</span></span><span style="display:flex;"><span> } <span style="color:#66d9ef">else</span> {
</span></span><span style="display:flex;"><span> <span style="color:#66d9ef">if</span> (<span style="color:#a6e22e">data</span>[<span style="color:#a6e22e">i</span>] <span style="color:#f92672"><</span> <span style="color:#a6e22e">min</span>) {
</span></span><span style="display:flex;"><span> <span style="color:#66d9ef">continue</span>;
</span></span><span style="display:flex;"><span> }
</span></span><span style="display:flex;"><span> <span style="color:#a6e22e">highs</span>[<span style="color:#a6e22e">highs</span>.<span style="color:#a6e22e">length</span> <span style="color:#f92672">-</span> <span style="color:#ae81ff">1</span>] <span style="color:#f92672">=</span> <span style="color:#a6e22e">data</span>[<span style="color:#a6e22e">i</span>];
</span></span><span style="display:flex;"><span> }
</span></span><span style="display:flex;"><span> <span style="color:#a6e22e">highs</span>.<span style="color:#a6e22e">sort</span>(<span style="color:#66d9ef">function</span>(<span style="color:#a6e22e">a</span>, <span style="color:#a6e22e">b</span>) {
</span></span><span style="display:flex;"><span> <span style="color:#66d9ef">return</span> <span style="color:#a6e22e">b</span> <span style="color:#f92672">-</span> <span style="color:#a6e22e">a</span>;
</span></span><span style="display:flex;"><span> });
</span></span><span style="display:flex;"><span> <span style="color:#a6e22e">min</span> <span style="color:#f92672">=</span> <span style="color:#a6e22e">highs</span>[<span style="color:#a6e22e">highs</span>.<span style="color:#a6e22e">length</span> <span style="color:#f92672">-</span> <span style="color:#ae81ff">1</span>];
</span></span><span style="display:flex;"><span> }
</span></span><span style="display:flex;"><span> <span style="color:#66d9ef">if</span> (<span style="color:#a6e22e">callback</span> <span style="color:#f92672">&&</span> <span style="color:#e6db74">"function"</span> <span style="color:#f92672">===</span> <span style="color:#66d9ef">typeof</span> <span style="color:#a6e22e">callback</span>) {
</span></span><span style="display:flex;"><span> <span style="color:#a6e22e">callback</span>(<span style="color:#a6e22e">highs</span>);
</span></span><span style="display:flex;"><span> }
</span></span><span style="display:flex;"><span> };
</span></span><span style="display:flex;"><span> <span style="color:#66d9ef">var</span> <span style="color:#a6e22e">run</span> <span style="color:#f92672">=</span> <span style="color:#66d9ef">function</span>() {
</span></span><span style="display:flex;"><span> <span style="color:#75715e">// test config
</span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span> <span style="color:#66d9ef">var</span> <span style="color:#a6e22e">returnsize</span> <span style="color:#f92672">=</span> parseInt(document.<span style="color:#a6e22e">getElementById</span>(<span style="color:#e6db74">'input-returnsize'</span>).<span style="color:#a6e22e">value</span>, <span style="color:#ae81ff">10</span>),
</span></span><span style="display:flex;"><span> <span style="color:#a6e22e">samplesize</span> <span style="color:#f92672">=</span> parseInt(document.<span style="color:#a6e22e">getElementById</span>(<span style="color:#e6db74">'input-samplesize'</span>).<span style="color:#a6e22e">value</span>, <span style="color:#ae81ff">10</span>),
</span></span><span style="display:flex;"><span> <span style="color:#a6e22e">lowerbound</span> <span style="color:#f92672">=</span> parseInt(document.<span style="color:#a6e22e">getElementById</span>(<span style="color:#e6db74">'input-lowerbound'</span>).<span style="color:#a6e22e">value</span>, <span style="color:#ae81ff">10</span>),
</span></span><span style="display:flex;"><span> <span style="color:#a6e22e">upperbound</span> <span style="color:#f92672">=</span> parseInt(document.<span style="color:#a6e22e">getElementById</span>(<span style="color:#e6db74">'input-upperbound'</span>).<span style="color:#a6e22e">value</span>, <span style="color:#ae81ff">10</span>);
</span></span><span style="display:flex;"><span> <span style="color:#75715e">// generate test data
</span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span> <span style="color:#66d9ef">var</span> <span style="color:#a6e22e">dataset</span> <span style="color:#f92672">=</span> [];
</span></span><span style="display:flex;"><span> <span style="color:#66d9ef">while</span> (<span style="color:#a6e22e">samplesize</span><span style="color:#f92672">--</span>) {
</span></span><span style="display:flex;"><span> <span style="color:#a6e22e">dataset</span>.<span style="color:#a6e22e">push</span>(Math.<span style="color:#a6e22e">floor</span>(Math.<span style="color:#a6e22e">random</span>() <span style="color:#f92672">*</span> (<span style="color:#a6e22e">upperbound</span> <span style="color:#f92672">-</span> <span style="color:#a6e22e">lowerbound</span>) <span style="color:#f92672">+</span> <span style="color:#a6e22e">lowerbound</span>));
</span></span><span style="display:flex;"><span> }
</span></span><span style="display:flex;"><span> document.<span style="color:#a6e22e">getElementById</span>(<span style="color:#e6db74">'sampleset'</span>).<span style="color:#a6e22e">innerHTML</span> <span style="color:#f92672">=</span> <span style="color:#a6e22e">dataset</span>.<span style="color:#a6e22e">join</span>(<span style="color:#e6db74">', '</span>);
</span></span><span style="display:flex;"><span> <span style="color:#a6e22e">getHighs</span>(<span style="color:#a6e22e">dataset</span>, <span style="color:#a6e22e">returnsize</span>,
</span></span><span style="display:flex;"><span> <span style="color:#66d9ef">function</span>(<span style="color:#a6e22e">rs</span>) {
</span></span><span style="display:flex;"><span> document.<span style="color:#a6e22e">getElementById</span>(<span style="color:#e6db74">'resultset'</span>).<span style="color:#a6e22e">innerHTML</span> <span style="color:#f92672">=</span> <span style="color:#a6e22e">rs</span>.<span style="color:#a6e22e">join</span>(<span style="color:#e6db74">', '</span>);
</span></span><span style="display:flex;"><span> }
</span></span><span style="display:flex;"><span> );
</span></span><span style="display:flex;"><span> };
</span></span><span style="display:flex;"><span> document.<span style="color:#a6e22e">getElementById</span>(<span style="color:#e6db74">'form-sample-generator'</span>).<span style="color:#a6e22e">addEventListener</span>(<span style="color:#e6db74">'submit'</span>, <span style="color:#66d9ef">function</span>(<span style="color:#a6e22e">event</span>) {
</span></span><span style="display:flex;"><span> <span style="color:#a6e22e">event</span>.<span style="color:#a6e22e">preventDefault</span>();
</span></span><span style="display:flex;"><span> <span style="color:#a6e22e">run</span>();
</span></span><span style="display:flex;"><span> });
</span></span><span style="display:flex;"><span>})();</span></span></code></pre></div>
</div>