比较两个复杂对象是否相等 亲测有效

经常会遇到要比较两个复杂的对象是否相等,在参考了网上各种方法之后,得出了结果

通过递归的方式进行判断

function deepEquals (x, y) {
  // 先判断传入的是否为对象
  let f1 = x instanceof Object
  let f2 = y instanceof Object
  if (!f1 || !f2) {
    return x === y
  }
  if (Object.keys(x).length !== Object.keys(y).length) {
    return false
  }
  let newX = Object.keys(x)
  for (let p = 0; p < newX.length; p++) {
    let p2 = newX[p]
    let a = x[p2] instanceof Object
    let b = y[p2] instanceof Object
    if (a && b) {
      if (!deepEquals(x[p2], y[p2])) {
        return false
      }
    } else if (x[p2] !== y[p2]) {
      return false
    }
  }
  return true
}

测试代码

let data1 = {
    name: '张三',
    sex: '男',
    hobby: ['唱歌', '跳舞'],
    family: [
        {
            'father': '张无',
            'mother': '刘云'
        }
    ]
}
let data2 = {
    name: '张三',
    sex: '男',
    hobby: ['唱歌', '跳舞'],
    family: [
        {
            'father': '张无',
            'mother': '李思'
        }
    ]
}
console.log(deepEquals(data1, data2))

结果
比较两个复杂对象是否相等 亲测有效_第1张图片

你可能感兴趣的:(JavaScript)