鍍金池/ 問答/Java  網(wǎng)絡(luò)安全  HTML/ json中如何根據(jù)指定的key獲取它的父節(jié)點-js?

json中如何根據(jù)指定的key獲取它的父節(jié)點-js?

Code

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

描述

使用js寫一個方法,根據(jù)指定的key獲取它的父節(jié)點,比如知道son,如果獲取它的父節(jié)點father?

回答
編輯回答
青瓷

看了上面的答案,都是返回父節(jié)點father的值,那如果要求返回的是 father,這個父節(jié)點的key,還要雙層循環(huán)嗎加遞歸嗎?

2017年6月15日 19:40
編輯回答
失心人
var json = {
    family: {
        father: {
            son: {
                name: "zhangsan"
            }
        }
    }
};
function findParent(obj, child, parent) {
    for (const key in obj) {
        if (child === key) {
            return parent;
        } else {
            return findParent(obj[key], child, obj);
        }
    }
}
console.log('result', findParent(json, 'son'));
2017年6月5日 17:17
編輯回答
笨笨噠
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})))
                    }
                }
            }
2017年4月16日 19:01