如果路径可变,如何使用可选链接?
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')
)
好的,现在我可以使用 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')
)