如果路径可变,如何使用可选链接?

How to use Optional Chaining if path is variable?

好的,现在我可以使用 ES11 替换:

const name = _.get(response, 'data.options.name');

与:

const name = response?.data?.options?.name;

但是,如果 'data.options.name' 作为变量传递,我该如何使用呢?

例如,在以下情况下,如何轻松(一行)替换lodash?

async someFunc(doc, path) {
    let prop = _.get(doc, path);
    if (prop) {
        await doSomethingUseful(prop);
    }
}

您可以将路径拆分为 .reduce 部分。以 doc 对象作为累加器和 return 每次迭代中的嵌套对象开始,可选链接

let prop = path.split(".").reduce((acc, part) => acc?.[part], doc)

const get = (doc, path) => path.split(".").reduce((acc, part) => acc?.[part], doc)

console.log(
  get({ data: { } }, 'data.options.name'),
  get({ data: { options: {} } }, 'data.options.name'),
  get({ data: { options: { name: 'abc' } } }, 'data.options.name')
)