Javascript: Есть ли чистый способ доступа к свойствам объекта в зависимости от того, существует ли значение переменной? - PullRequest
0 голосов
/ 24 апреля 2020

Контекст:

Это скорее вопрос стиля в надежде на написание более чистого кода.

Проблема:

Как показано в коде ниже, в зависимости от того, содержат ли определенные переменные значение или нет, код использует переменную для более глубокого доступа к объекту. У меня есть ощущение, что должен быть более ясный способ go по этому поводу, поэтому мне любопытно получить некоторую информацию по этому вопросу. Любые идеи с благодарностью. Спасибо!

Код:

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

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

return dataRefreshSpec?.data[stageKey][datasetType]

1 Ответ

1 голос
/ 24 апреля 2020

Я мог бы сначала проверить существование полного пути, а затем получить к нему доступ. Если его там нет, то вы знаете, что вы можете go только до 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]

Эти два последних технически немного отличаются, так как они не проверяйте значение самого ключа, а скорее его результат при применении его значения к объектам.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...