Check for duplication (v7)

Revision 7 of this benchmark created on


Setup

var arr = [];
    
    for (var i = 0; i < 2000; i += 1) {
      arr.push({
        name: 'name-' + Math.round(Math.random() * 2000)
      });
    }
    
    // 1st Implementation
    function checkForDuplicates1(arr) {
      var i, j, a, b, hasDuplicate;
      for (i = 0; i < arr.length; i += 1) {
        a = arr[i];
        if (!a.hasOwnProperty('duplicate')) {
          a.duplicate = false;
    
          for (j = 0; j < arr.length; j += 1) {
            b = arr[j];
            if (!b.hasOwnProperty('duplicate') && i !== j && a.name === b.name) {
              a.duplicate = true;
              b.duplicate = true;
            }
          }
        }
      }
    }
    
    // 2nd Implementation
    function checkForDuplicates2(arr) {
      var i, j;
      for (i = 0; i < arr.length; i += 1) {
        if (!arr[i].hasOwnProperty('duplicate')) {
          arr[i].duplicate = false;
          
          for (j = 0; j < arr.length; j += 1) {
            if (!arr[j].hasOwnProperty('duplicate') && arr[i].name ===  arr[j].name) {
              arr[i].duplicate = true;
              arr[j].duplicate = true;
            }
          }
        }
      }
    }
    
    // 3nd Implementation
    
    function checkForDuplicates3(arr) {
      var duplicationMap = getDuplicationMap(arr);
      arr.forEach(function(el) {
        el.duplicate = duplicationMap[el.name];
      });
    }
    
    function getDuplicationMap(arr) {
      return arr.reduce(function(duplicationMap, el) {
        duplicationMap[el.name] = (el.name in duplicationMap);
        return duplicationMap;
      }, {});
    }
    
    // 4rd Implementation
    
    function checkForDuplicates4(arr) {
      var duplicationMap = {};
      
      arr.forEach(function(el) {
        duplicationMap[el.name] = (el.name in duplicationMap);
      });
      
      arr.forEach(function(el) {
        el.duplicate = duplicationMap[el.name];
      });
    }
    
    // 5th Implementation
    function checkForDuplicates5(arr) {
      var i, el;
      var duplicationMap = {};
      
      for (i = 0; i < arr.length; i += 1) {
        el = arr[i];
        duplicationMap[el.name] = (el.name in duplicationMap);
      }
      
      for (i = 0; i < arr.length; i += 1) {
        el = arr[i];
        el.duplicate = duplicationMap[el.name];
      };
    }
    
    // 6th Implementation
    
    function checkForDuplicates6(arr) {
      var i, el;
      var duplicationMap = {};
      
      for (i = 0; i < arr.length; i += 1) {
        el = arr[i];
        duplicationMap[el.name] = duplicationMap[el.name] || 0;
        duplicationMap[el.name] += 1;
      }
      
      for (i = 0; i < arr.length; i += 1) {
        el = arr[i];
        el.duplicate = (duplicationMap[el.name] > 1);
      }
    }

Teardown


    arr = null;
  

Test runner

Ready to run.

Testing in
TestOps/sec
2 nested loops
checkForDuplicates1(arr);
ready
2 nested loops without temp variables
checkForDuplicates2(arr);
ready
With object as a Map + reusable function
checkForDuplicates3(arr);
ready
With object as a Map in one function
checkForDuplicates4(arr);
ready
With object as a Map and for loops
checkForDuplicates5(arr);
ready
With object as a Map + counters
checkForDuplicates6(arr);
ready

Revisions

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