内容:
这更多是样式问题,希望编写更简洁的代码。
问题:
如下代码所示,根据某些变量是否包含值,代码使用变量来更深入地访问对象。我觉得必须有一种更干净的方法来解决这个问题,所以我很好奇要对此提供一些意见。任何见解都将不胜感激。谢谢!
码:
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]
最后两个在技术上有些不同,因为它们不测试密钥本身的值,而是将其值应用于对象时的结果。