2

好的,所以我现在可以用 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);
    }
}
4

1 回答 1

1

您可以拆分路径.reduce部分。doc从object 作为累加器开始,并在每次迭代中返回嵌套对象,并带有可选链接

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')
)

于 2020-12-05T13:03:51.153 回答