Uniquify Array: Hash vs IndexOf

Benchmark created by Ian on


Setup

/*var array = [], result;
    (function () {
        var i, j, cur;
        for (i = 0, j = 2000; i < j; i++) {
            cur = "" + ((i % 5) + 1);
            array.push(cur);
        }
    }());*/
    var array, result;
    array = ["/62","/15","/65","/62","/15","/08","/01","/65","/62","/65","/62","/15","/01"];

Test runner

Ready to run.

Testing in
TestOps/sec
IndexOf Same Array
var i, j, cur;
result = [];
for (i = 0, j = array.length; i < j; i++) {
    cur = array[i];
    if (array.indexOf(cur) === i) {
        result.push(cur);
    }
}
ready
IndexOf Result Array
var i, j, cur;
result = [];
for (i = 0, j = array.length; i < j; i++) {
    cur = array[i];
    if (result.indexOf(cur) === -1) {
        result.push(cur);
    }
}
ready
IndexOf Same Array in Filter
result = array.filter(function (value, index, arr) {
    return (arr.indexOf(value) === index);
});
ready
IndexOf Temp in Filter
result = array.filter(function (value, index, arr) {
    if (this.indexOf(value) === -1) {
        this.push(value);
        return true;
    }
}, []);
ready
Hash Populate (With In) Get Keys
var hash, i, j, cur;
hash = {};
for (i = 0, j = array.length; i < j; i++) {
    cur = array[i];
    if (!(cur in hash)) {
         hash[cur] = true;
    }
}
result = Object.keys(hash);
ready
Hash Populate (With Truthy Check) Get Keys
var hash, i, j, cur;
hash = {};
for (i = 0, j = array.length; i < j; i++) {
    cur = array[i];
    if (!hash[cur]) {
         hash[cur] = true;
    }
}
result = Object.keys(hash);
ready
Hash Populate (With In) Fill Result
var hash, i, j, cur;
hash = {};
result = [];
for (i = 0, j = array.length; i < j; i++) {
    cur = array[i];
    if (!(cur in hash)) {
        hash[cur] = true;
        result.push(cur);
    }
}
ready
Hash Populate (With Truthy Check) Fill Result
var hash, i, j, cur;
hash = {};
result = [];
for (i = 0, j = array.length; i < j; i++) {
    cur = array[i];
    if (!hash[cur]) {
        hash[cur] = true;
        result.push(cur);
    }
}
ready

Revisions

You can edit these tests or add more tests to this page by appending /edit to the URL.