Javascript:是否存在一种干净的方法来访问对象属性,具体取决于变量的值是否存在?

时间:2020-04-24 19:38:53

标签: javascript object

上下文:

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

问题:

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

代码:

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

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

return dataRefreshSpec?.data[stageKey][datasetType]

1 个答案:

答案 0 :(得分:1)

我可能首先测试完整路径的存在,然后再访问它。如果不存在,那么您将知道只能到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]

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