比较两个array或者object是否深度相等

function objectEquals(object1: Object, object2: Object): boolean {
  for (let propName in object1) {
    if (object1.hasOwnProperty(propName) != object2.hasOwnProperty(propName)) {
      return false
    } else if (typeof object1[propName] != typeof object2[propName]) {
      return false
    }
  }
  for (let propName in object2) {
    if (object1.hasOwnProperty(propName) != object2.hasOwnProperty(propName)) {
      return false
    } else if (typeof object1[propName] != typeof object2[propName]) {
      return false
    }
    if (!object1.hasOwnProperty(propName)) {
    continue
  }
  if (object1[propName] instanceof Array && object2[propName] instanceof Array) {
    if (!arrayEquals(object1[propName], object2[propName])) {
      return false
    }
   } else if (object1[propName] instanceof Object && object2[propName] instanceof Object) {
    if (!objectEquals(object1[propName], object2[propName])) {
      return false
    }
   } else if (object1[propName] != object2[propName]) {
    return false
    }
  }
  return true
}
 

function arrayEquals(array1, array2): boolean {
  if (!array1 && !array2) {
    return true
  }
  if (!array1 && array2 || array1 && !array2) {
    return false
  }
  if (array1.length != array2.length) {
    return false
  }
  for (let i = 0, l = array1.length; i < l; i++) {
    if (array1[i] instanceof Array && array2[i] instanceof Array) {
      if (!arrayEquals(array1[i], array2[i]))
        return false
    } else if (array1[i] instanceof Object && array2[i] instanceof Object) {
      if (!objectEquals(array1[i], array2[i]))
        return false
    } else if (array1[i] != array2[i]) {
      return false
    }
  }
  return true
}
原文地址:https://www.cnblogs.com/brainworld/p/8662253.html