上下文:
这更多是样式问题,希望编写更简洁的代码。
问题:
如下面的代码所示,根据某些变量是否包含值,代码使用变量来更深入地访问对象。我觉得必须有一种更清洁的方法来解决这个问题,所以我很好奇对此有所投入。任何见解都将不胜感激。谢谢!
代码:
if (!stageKey) {
return dataRefreshSpec?.data
}
if (!datasetType) {
return dataRefreshSpec?.data[stageKey]
}
return dataRefreshSpec?.data[stageKey][datasetType]
答案 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]
这最后两个在技术上有些不同,因为它们不测试密钥本身的值,而是将其值应用于对象时的结果。