json中如何根据指定的key获取它的父节点-js?

Code

var json={
    family:{
        father:{
            son:{
                name:"zhangsan"
            }
        }
    }
}

描述

使用js写一个方法,根据指定的key获取它的父节点,比如知道son,如果获取它的父节点father?

阅读 7.5k
2 个回答
function findKey(obj, key) {
    if (typeof obj !== 'object') {
        return
    }
    var ret
    Object.keys(obj).forEach(_key => {
        if (key === _key) {
            ret = obj
        } else {
          ret = ret|| findKey(obj[_key], key)
        }
    })
    return ret
}

非递归算法

function findKey(obj, key) {
                var queue = Object.keys(obj).map(k => ({item: obj[k], parent: obj, key: k}))
                while(queue.length > 0) {
                    var top = queue.shift()
                    if (top.key === key) {
                        return top.parent
                    }
                    if (typeof top.item === 'object') {
                        queue.push(...Object.keys(top.item).map(k => ({item: top.item[k], parent: top.item, key: k})))
                    }
                }
            }

看了上面的答案,都是返回父节点father的值,那如果要求返回的是 father,这个父节点的key,还要双层循环吗加递归吗?

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题