Toggle navigation
MeasureThat
.net
Create a benchmark
Tools
Feedback
FAQ
Register
Log In
Run results for:
Lodash isEqual test vs Custom Recursive Function
Custom function checks K:V's match and ignores order of K:V's. Taken from: https://nathanworden.medium.com/deep-equality-in-javascript-objects-c98ec918e888 -- thank you!
Go to the benchmark
Embed
Embed Benchmark Result
Run details:
User agent:
Mozilla/5.0 (X11; Linux x86_64; rv:150.0) Gecko/20100101 Firefox/150.0
Browser:
Firefox 150
Operating system:
Linux
Device Platform:
Desktop
Date tested:
2 months ago
Custom Recursive Function 1
3.3M/s
Custom Recursive Function 2
2.5M/s
_.isEqual 1
1.7M/s
_.isEqual 2
1.1M/s
Custom Recursive Function 3
855K/s
_.isEqual 3
631K/s
View exact numbers
Test name
Executions per second
✓
Custom Recursive Function 1
3,251,228 Ops/sec
Custom Recursive Function 2
2,510,522 Ops/sec
_.isEqual 1
1,690,389 Ops/sec
_.isEqual 2
1,112,778 Ops/sec
Custom Recursive Function 3
855,334 Ops/sec
_.isEqual 3
630,826 Ops/sec
HTML Preparation code:
<script src="https://cdn.jsdelivr.net/npm/lodash@4.17.4/lodash.min.js"></script>
Script Preparation code:
// 1 level deep window.foo1 = { a: 1, b: 2, c: { a: 1, b: 2, c: { a: 1, b: 2 } } }; window.bar1 = { a: 1, b: 3, c: { a: 1, b: 2, c: { a: 1, b: 2 } } }; // 2 levels deep window.foo2 = { a: 1, b: 2, c: { a: 1, b: 2, c: { a: [1,2], b: 2 } } }; window.bar2 = { a: 1, b: 2, c: { a: 1, b: 3, c: { a: [1,2], b: 2 } } }; // 3 levels deep window.foo3 = { a: 1, b: 2, c: { a: 1, b: 2, c: { a: [1,2], b: [1,2] } } }; window.bar3 = { a: 1, b: 2, c: { a: 1, b: 2, c: { a: [1,2], b: [1,2] } } };
Tests:
_.isEqual 1
_.isEqual(window.foo1, window.bar1)
Custom Recursive Function 1
const areObjectKeysValuesEqual = (obj1, obj2) => { if (Object.keys(obj1).length !== Object.keys(obj2).length) { return false; } for (key of Object.keys(obj1)) { if (typeof obj1[key] === "object") { if (!areObjectKeysValuesEqual(obj1[key], obj2[key])) { return false; } } if (obj1[key] !== obj2[key]) { return false; } } return true; }; const result = areObjectKeysValuesEqual(window.foo1, window.bar1);
_.isEqual 2
_.isEqual(window.foo2, window.bar2)
Custom Recursive Function 2
const areObjectKeysValuesEqual = (obj1, obj2) => { if (Object.keys(obj1).length !== Object.keys(obj2).length) { return false; } for (key of Object.keys(obj1)) { if (typeof obj1[key] === "object") { if (!areObjectKeysValuesEqual(obj1[key], obj2[key])) { return false; } } if (obj1[key] !== obj2[key]) { return false; } } return true; }; const result = areObjectKeysValuesEqual(window.foo2, window.bar2);
_.isEqual 3
_.isEqual(window.foo3, window.bar3)
Custom Recursive Function 3
const areObjectKeysValuesEqual = (obj1, obj2) => { if (Object.keys(obj1).length !== Object.keys(obj2).length) { return false; } for (key of Object.keys(obj1)) { if (typeof obj1[key] === "object") { if (!areObjectKeysValuesEqual(obj1[key], obj2[key])) { return false; } } if (obj1[key] !== obj2[key]) { return false; } } return true; }; const result = areObjectKeysValuesEqual(window.foo3, window.bar3);