内容:

这更多是样式问题,希望编写更简洁的代码。

问题:

如下代码所示,根据某些变量是否包含值,代码使用变量来更深入地访问对象。我觉得必须有一种更干净的方法来解决这个问题,所以我很好奇要对此提供一些意见。任何见解都将不胜感激。谢谢!

码:

if (!stageKey) {
    return dataRefreshSpec?.data
}

if (!datasetType) {
    return dataRefreshSpec?.data[stageKey]
}

return dataRefreshSpec?.data[stageKey][datasetType]

最佳答案

我可能先测试完整路径的存在,然后再访问它。如果不存在,则您只能知道stageKey(如果存在),否则只能走.data

if (stageKey && datasetType) {
    return dataRefreshSpec?.data[stageKey][datasetType]
}

return stageKey ? dataRefreshSpec?.data[stageKey] : dataRefreshSpec?.data


或者像这样,如果我正确使用了新语法:

return dataRefreshSpec?.data?.[stageKey]?.[datasetType] ??
       dataRefreshSpec?.data?.[stageKey] ??
       dataRefreshSpec?.data


或者有一个旧的备用数据库,根据您的要求可能会起作用:

return (((dataRefreshSpec || {}).data || {})[stageKey] || {})[datasetType]


最后两个在技术上有些不同,因为它们不测试密钥本身的值,而是将其值应用于对象时的结果。

09-25 19:27