HTML Preparation code:
AخA
 
1
<script src="https://cdn.jsdelivr.net/npm/lodash@4.17.4/lodash.min.js"></script>
Script Preparation code:
x
 
// 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);
Rendered benchmark preparation results:

Suite status: <idle, ready to run>

Previous results

Experimental features:

  • Test case name Result
    _.isEqual 1
    Custom Recursive Function 1
    _.isEqual 2
    Custom Recursive Function 2
    _.isEqual 3
    Custom Recursive Function 3

    Fastest: N/A

    Slowest: N/A

Latest run results:
Run details: (Test run date: 2 years ago)
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/105.0.0.0 Safari/537.36
Chrome 105 on Windows
View result in a separate tab
Test name Executions per second
_.isEqual 1 596294.6 Ops/sec
Custom Recursive Function 1 324546.4 Ops/sec
_.isEqual 2 390322.2 Ops/sec
Custom Recursive Function 2 158911.4 Ops/sec
_.isEqual 3 244106.0 Ops/sec
Custom Recursive Function 3 62041.2 Ops/sec