对象比较-深层,浅层

1.当对象只有1层的时候 只需要做下浅层对比就好了

shallowEqual=(...object)=>{
    let firstObject=object[0]
    let flag=true
    object.map(item=>{
      if(Object.keys(item).length !== Object.keys(firstObject).length){
        return flag=false
      }
    })
    if(!flag){
      return flag
    }
    object.map(item=>{
      let array=Object.keys(item)
      array.map(key=>{
        if(item[key] !== firstObject[key]){
          flag=false
        }
      })
    })
    return flag
  }

2.当对象属性中包含对象时,需要用深层比较

deepEqual=(...object)=>{
    let firstObject=object[0]
    let flag=true
    object.map(item=>{
      if(Object.keys(item).length !== Object.keys(firstObject).length){
        flag=false
      }
    })
    if(!flag){
      return flag
    }
    for(let i=0 ; i<object.length;i++){
      let array=Object.keys(object[i])
      for(let j=0; j<array.length;j++){
        // 1.判断当前比较的是否为对象 是就对比第一对象里的值是否也是对象
        if(this.isObject(object[i][array[j]])){
          //是对象
          if(this.isObject(firstObject[array[j]])){
            // 第一对象里对应的值也是对象
            flag=this.deepEqual(object[i][array[j]],firstObject[array[j]])
          }else{
            flag=false
          }
        }else{
          //不是对象
          if(object[i][array[j]]!==firstObject[array[j]]){
            flag=false
          }
        }
        if(!flag){
          return flag
        }
      }
      if(!flag){
        return flag
      }
    }
    return flag
  }

  isObject=(object)=>{
    return object !==null && typeof object === 'object'
  }

 

posted on 2020-06-12 10:53  秃了头也不退休  阅读(552)  评论(0编辑  收藏  举报

导航