首页 > 解决方案 > Get next property of nested object in javascript

问题描述

I have been trying to write a function that would return an another in line property key.

Lets say we have this JSON:

'Test123': {
    'Another Test': {},
    'Test some more': {
        'Still testing?': {
            'Yeah...': {}
        },
        'Never ending story': {}
    }
},

For example, if we pass 'Still testing?' key into the function it should return 'Yeah...', but if we pass 'Yeah...' it should return 'Never ending story'. Doest someone knows who to do it? I have been trying to write a function doing that but my brain doesn't support it...

标签: javascriptjsonloopsself-reference

解决方案


let obj = {
    'Test123': {
        'Another Test': {},
        'Test some more': {
            'Still testing?': {
                'Yeah...': {}
            },
            'Never ending story': {}
        }
    }
}

function nextKey(keyStr, object) {
    if (!keyStr || !object || typeof object != 'object' || object.constructor.name != 'Object') {
        console.log("Improper Parameter !!!")
        return
    }
    let found = false
    let answer = {}
    findKey(object)
    return (Object.keys(answer).length) ? answer : "";

    function findKey(obj) {
        for (let key of Object.keys(obj)) {
            if(Object.keys(answer).length) return;
            let value = obj[key]
            if(key == keyStr)found = true;
            else if(found) {answer.key = key; answer.value = value; return}
            if (Object.keys(value).length) findKey(value)
        }
    }
}

console.log(nextKey('Still testing?', obj))     //{ key: 'Yeah...', value: {} }
console.log(nextKey('Yeah...', obj))            //{ key: 'Never ending story', value: {} }


推荐阅读