JavaScript中是否有一个衬里使用字符串数组作为对象路径?

时间:2018-12-20 09:42:00

标签: javascript ecmascript-6

假设我有以下数组:

let path = ['foo','bar']

我有这个项目:

let item = {
    faa: 'whatever',
    foo: {
        bar: 'hello there', //general kenobi
        bor: 'nope'
    }
}

我想使用类似如下的内容访问“ hello there”:

item[path] or item.path or item[path.join(".")]

您明白了,这可行吗?如果是,怎么办? (当然,此问题中的内容无效)

2 个答案:

答案 0 :(得分:5)

你可以

let target = path.reduce((o, t)=> o ? o[t] : undefined, item)

这种单行代码旨在确保没有匹配项时不会出现任何错误:它只会返回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)

答案 1 :(得分:0)

您还可以使用第三方库,例如Lodash。

然后您可以使用Lodash进行如下操作:

def residual_loss(): #<- this is just rought example, youre going to have to figure this out.
  ....
  return loss

model.compile(adam, loss=residual_loss, metrics=[PSNR, "accuracy"])

关于它的好处是,如果该项目没有'foo',则不会出现错误。就像在对象上安全导航一样。