Time comparation of Intersection Methods

JSLitmus Test

by neoswf

HTML

<script src="http://www.broofa.com/Tools/JSLitmus/JSLitmus.js"></script>
<script src="http://underscorejs.org/underscore-min.js"></script>
<h1>Time comparation of Intersection Methods</h1>
<a href="http://www.broofa.com/Tools/JSLitmus/">banchmark url reference</a>

CSS

body{padding:1em;font-family:tahoma}
h1{font-weight:bold}
a{line-height:3em; font-style:italic}

JavaScript

mainList = [-11, -1, 1, 2, 3, 4, 5, 6, 20, 44, 87, 99, 100];
toSearchList = [-1, 1, 4];

function SimpleJsLoops(x, y){
    var ret = [];
    for (var i = 0; i < x.length; i++) {
        for (var z = 0; z < y.length; z++) {
            if (x[i] == y[z]) {
                ret.push(i);
                break;
            }
        }
    }
    return ret;            
}

function intersection(x, y) {
        x.sort();
        y.sort();
        var i = j = 0;
        var ret = [];
        while (i < x.length && j < y.length) {
            if (x[i] < y[j]) i++;
            else if (y[j] < x[i]) j++;
            else {
                ret.push(i);
                i++, j++;
            }
        }
        return ret;
}

function intersect_safe(a, b)
{
  var ai = bi= 0;
  var result = [];

  while( ai < a.length && bi < b.length ){
     if      (a[ai] < b[bi] ){ ai++; }
     else if (a[ai] > b[bi] ){ bi++; }
     else /* they're equal */
     {
       result.push(ai);
       ai++;
       bi++;
     }
  }

  return result;
}

var arrayContains = Array.prototype.indexOf ?
    function(arr, val) {
        return arr.indexOf(val) > -1;
    } :
    function(arr, val) {
        var i = arr.length;
        while (i--) {
            if (arr[i] === val) {
                return true;
            }
        }
        return false;
    };

function arrayIntersection() {
    var val, arrayCount, firstArray, i, j, intersection = [], missing;
    var arrays = Array.prototype.slice.call(arguments); 
    firstArr = arrays.pop();
    if (firstArr) {
        j = firstArr.length;
        arrayCount = arrays.length;
        while (j--) {
            val = firstArr[j];
            missing = false;
            i = arrayCount;
            idx = null;
            while (!missing && i--) {
                idx = arrays[i].indexOf(val);
                if ( !arrayContains(arrays[i], val) ) {
                    missing = true;
                }
            }
            if (!missing) {
               ...