Array Comparison 1

JavaScript performance comparison

Revision 6 of this test case created

Preparation code

`` <script>  Benchmark.prototype.setup = function() {    var a = [];    var b = [];    var arr = [];    var obj = {};    var max = 10000;        for (var i = 0; i < max; i++) {      if (i % 20) {        b[max - i - 1] = arr;        a[i] = arr;      }       else if( i % 10 ) {        b[ max - i - 1] = obj;        a[i] = obj;      }      else {        b[ max - i - 1] = i;        a[i] = i;      }    }        function sameElementsBrunoLM(a, b) {      // immediately discard if they are of different sizes      if (a.length != b.length) return false;          b = b.slice(0); // clone to keep original values after the function      a.forEach(function(e) {        var i;        if ((i = b.indexOf(e)) != -1) b.splice(i, 1);      });          return !b.length;    }        function sameElementsBruno(a, b) {          // if length is not the same then must not be equal      if (a.length != b.length) return false;          // do an initial sort which will group types      a.sort();      b.sort();          for (var i = 0; i < a.length; i++) {            // if primitive then comparison will do        if (isPrimitive(a[i]) && isPrimitive(b[i])) {              if (a[i] != b[i]) return false;        }        // if not primitive then we will need to check for obj ref        else if (!isPrimitive(a[i]) && !isPrimitive(b[i])) {              if (b.indexOf(a[i]) === -1) return false;        }        // if both types are not the same then this array        // contains different number of primitives        else {          return false;        }      }          // if it gets this far it must be the same      return true;    }        function isPrimitive(arg) {      var type = typeof arg;      return arg == null || (type != "object" && type != "function");    }        function sameElementsHamidi(a, b) {      if (a.length != b.length) {        return false;      }      var ourB = b.concat();      return a.every(function(item) {        var index = ourB.indexOf(item);        if (index < 0) {          return false;        } else {          ourB.splice(index, 1);          return true;        }      });    }            function sameElementsTHG(a, b) {            var hash = function(x) {                return JSON.stringify(typeof x == "object" ? {o: a.indexOf(x)} : x);        }                return a.map(hash).sort().join() == b.map(hash).sort().join();    }      };</script>``

Test runner

Warning! For accurate results, please disable Firebug before running the tests. (Why?)

Java applet disabled.

Testing in unknown unknown
Test Ops/sec
sameElementsBrunoLM
``sameElementsBrunoLM(a, b);``
pending…
sameElementsBruno
``sameElementsBruno(a, b);``
pending…
sameElementsHamidi
``sameElementsHamidi(a, b)``
pending…
sameElementsTHG
``sameElementsTHG(a, b)``
pending…

Revisions

You can edit these tests or add even more tests to this page by appending `/edit` to the URL. Here’s a list of current revisions for this page:

Comment form temporarily disabled.