这个JavaScript运算题怎么做?

var obj = {
    aa: {
        bb: {
            cc: 123
        },
        dd: 456
    },
    ee: 789
};

var str = 'aa.bb';

//如何得出如下结果:
var result = {
    aa: {
        bb: {
            cc: 123
        }
    }
}
阅读 1.4k
2 个回答

有了,不过得执行两遍 reduce:

var obj = {
    aa: {
        bb: {
            cc: 123
        },
        dd: 456
    },
    ee: 789
}

var str = 'aa.bb'

//

var floor = str
    .split('.')
    .reduce((total, curr) => total[curr], obj)

var result = str
    .split('.')
    .reduceRight((total, curr, index) => ({[curr]: total}), floor)

console.log(result)
function getDataByPath(obj, path) {
    let keyArr = path.split('.');
    function loop(obj){
        let prop = keyArr.shift()
        return prop ? {[prop]: loop(obj[prop])} : obj
    }
    return loop(obj)
};

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