es2015/equals.js
function objectEquals(object1, object2, traversedValues) {
  let keys1 = Object.keys(object1)
  let keys2 = Object.keys(object2)
  
  return structureEquals(
    object1,
    object2,
    keys1,
    keys2,
    (object, key) => object[key],
    traversedValues
  )
}
function objectEquals(object1, object2, traversedValues) {
  let keys1 = Object.keys(object1)
  let keys2 = Object.keys(object2)
  
  return structureEquals(
    object1,
    object2,
    keys1,
    keys2,
    (object, key) => object[key],
    traversedValues
  )
}
function objectEquals ( object1 , object2 , traversedValues ) { let keys1 = Object . keys ( object1 ) let keys2 = Object . keys ( object2 ) return structureEquals ( object1 , object2 , keys1 , keys2 , ( object , key ) => object [ key ] , traversedValues ) }
Compares the two provided plain objects.

@param {Object<string, *>} object1 The 1st object to compare.
@param {Object<string, *>} object2 The 2nd object to compare.
@param {Map<Object, Object>} traversedValues A map of non-primitive values
traversed in the first structure to their equal counterparts in the
second structure.
@return {boolean} {@code true} if the objects are equal.
Compares the two provided plain objects .