jsPerf.app is an online JavaScript performance benchmark test runner & jsperf.com mirror. It is a complete rewrite in homage to the once excellent jsperf.com now with hopefully a more modern & maintainable codebase.
jsperf.com URLs are mirrored at the same path, e.g:
https://jsperf.com/negative-modulo/2
Can be accessed at:
https://jsperf.app/negative-modulo/2
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);
}
}
arr = null;
Ready to run.
Test | Ops/sec | |
---|---|---|
2 nested loops |
| ready |
2 nested loops without temp variables |
| ready |
With object as a Map + reusable function |
| ready |
With object as a Map in one function |
| ready |
With object as a Map and for loops |
| ready |
With object as a Map + counters |
| ready |
You can edit these tests or add more tests to this page by appending /edit to the URL.