Tests:
  • equality by gettingDifferences

    x
     
    const equalArrays = (arr1, arr2) => arr1.length === arr2.length &&
    arr1.every((element, index) => getDifferences(element, arr2[index]) === undefined)
    function getDifferences(original, modified) {
      if (original instanceof Array && modified instanceof Array) {
        return equalArrays(original, modified)
          ? undefined
          : modified
      }
      if (original instanceof Object && modified instanceof Object) {
        let result = {}
        for (const key of Object.keys(modified)) {
          const diff = getDifferences(original[key], modified[key])
          if (diff !== undefined) {
            result[key] = diff
          }
        }
        return !Object.keys(result).length
          ? undefined
          : result
      }
      return original === modified
        ? undefined
        : modified
    }
    const objA = {
        a: 1,
        b: 2,
        c: {
            d: 3,
            e: [4, {
                h: 5
            }]
        },
        f: [6, 7],
        g: 8
    }
    const objB = {
        a: 1,
        b: 2,
        c: {
            d: 3,
            e: [4, {
                h: 4
            }] // field h changed
        },
        f: [6, 7],
        g: 8
    }
    const arrA = [objA, objB]
    const arrB = [objA, objA]
    console.log(equalArrays(arrA, arrA))
    console.log(equalArrays(arrA, arrB))
  • equality by recursion

     
    const deepEqual = (thing1, thing2) => {
      if (thing1 instanceof Object && thing2 instanceof Object)
        return Object.keys(thing1).every(key => deepEqual(thing1[key], thing2[key]))
      return thing1 === thing2
    }
    const objA = {
        a: 1,
        b: 2,
        c: {
            d: 3,
            e: [4, {
                h: 5
            }]
        },
        f: [6, 7],
        g: 8
    }
    const objB = {
        a: 1,
        b: 2,
        c: {
            d: 3,
            e: [4, {
                h: 4
            }] // field h changed
        },
        f: [6, 7],
        g: 8
    }
    const arrA = [objA, objB]
    const arrB = [objA, objA]
    console.log(deepEqual(arrA, arrA))
    console.log(deepEqual(arrA, arrB))
Rendered benchmark preparation results:

Suite status: <idle, ready to run>

Previous results

Experimental features:

  • Test case name Result
    equality by gettingDifferences
    equality by recursion

    Fastest: N/A

    Slowest: N/A

Latest run results:
Run details: (Test run date: 4 years ago)
Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:82.0) Gecko/20100101 Firefox/82.0
Firefox 82 on Ubuntu
View result in a separate tab
Test name Executions per second
equality by gettingDifferences 7233.0 Ops/sec
equality by recursion 7396.7 Ops/sec