来个 js 算法大佬看下这个题?

我有 oldValue newValue 两个对象

var oldValue = {
  info: {
    age: 12,
    name: 'mike'
  }
}

var newValue = {
  info: {
    age: 13, // 不一样
    weight: { // 不一样
      max: 120,
      min: 50
    }
  },
  company: 'bb' // 不一样
}
compareDifference(oldValue,newValue) //['info.age','info.name', 'info.weight', 'company']

写一个函数 对比 两个对象的差异,并把差异项的 key 按递归层级返回出来

阅读 1.2k
1 个回答

虽然给你写了,但还是建议自己学习后理解后再提交作业

function compareDifference(old_obj, new_obj){
    let res = new Set()
    var deepCompare = (old_obj, new_obj, pre = '') => {
        for (const key in old_obj) {
            if (Object.hasOwnProperty.call(old_obj, key) && Object.hasOwnProperty.call(new_obj, key)) {
                const old_element = old_obj[key];
                const new_element = new_obj[key];
                if(old_element instanceof Object && new_element instanceof Object){
                    deepCompare(old_element, new_element, pre  == '' ? key : pre + '.' + key)
                } else {
                    if(old_element !== new_element){
                        res.add(pre + '.' + key)
                    }
                }
            }else{
                res.add(pre  == '' ? key : pre + '.' + key)
            }
        }
    }
    deepCompare(old_obj, new_obj)
    deepCompare(new_obj, old_obj)
    return res
}
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题