在javascript中有一个单行使用字符串数组作为对象路径吗?

Tom*_*Tom 2 javascript ecmascript-6

假设我有以下数组:

let path = ['foo','bar']
Run Code Online (Sandbox Code Playgroud)

我有这个项目:

let item = {
    faa: 'whatever',
    foo: {
        bar: 'hello there', //general kenobi
        bor: 'nope'
    }
}
Run Code Online (Sandbox Code Playgroud)

我想使用以下内容访问"你好":

item[path] or item.path or item[path.join(".")]
Run Code Online (Sandbox Code Playgroud)

你明白了,这是可行的,如果是的话,怎么样?(当然这个问题写的不起作用)

Den*_*ret 5

你可以做

let target = path.reduce((o, t)=> o ? o[t] : undefined, item)
Run Code Online (Sandbox Code Playgroud)

这种单行程旨在确保在没有匹配时不会出现任何错误:它只是返回undefined.

示范:

let item = {
    faa: 'whatever',
    foo: {
        bar: 'hello there', //general kenobi
        bor: 'nope'
    }
}
let path = ['foo','bar']
let target = path.reduce((o, t)=> o ? o[t] : undefined, item)
console.log(target)
Run Code Online (Sandbox Code Playgroud)