Доступ к свойству объекта с переменной и возврат к свойству по умолчанию, если он не существует - PullRequest
0 голосов
/ 13 ноября 2018

Я новичок в утверждении switch в Javascript.Самое интересное в этом то, что он объединяет несколько операторов if с результатом по умолчанию, если все if провалилось.

Я любопытный человек и хотел бы знать, как можно достичь этого "default", если все остальное не удалосьсо свойством объекта выберите с переменной.

Пример:

const action.type = "non-existing-property";

const runF = {
  CREATE_PROJECT_SUCCESS: () => {
    console.log("created project");
    return state;
  },
  CREATE_PROJECT_ERROR: () => {
    console.log("create project error");
    return state;
  },
  default: ()=>{
    console.log("Do default stuff if all else failed");
    return state;
  }
}[action.type];
runF();

Обычно значением action.type является либо CREATE_PROJECT_SUCCESS, либо CREATE_PROJECT_ERROR.Но что происходит, если собственность не существует?Тогда я хотел бы запустить свойство по умолчанию.

У кого-нибудь есть идеи, как это можно сделать?


Обновление:

Iнашел одно возможное решение, но это требует другого оператора if.Я хотел бы видеть более маленькое, быстрое решение.const action.type = "несуществующее свойство";

let runF = {
  CREATE_PROJECT_SUCCESS: () => {
    console.log("created project");
    return state;
  },
  CREATE_PROJECT_ERROR: () => {
    console.log("create project error");
    return state;
  }
}[action.type];

if (!runF) {
  //runF not defined/valid -> run default function
  runF = () => {
    console.log("Do default stuff if all else failed");
    return state;
  };
}

runF();

1 Ответ

0 голосов
/ 13 ноября 2018

Вы можете использовать логический оператор ИЛИ (||) внутри средства доступа к свойству, чтобы реализовать откат к имени свойства по умолчанию. Как то так:

const runF = {
  CREATE_PROJECT_SUCCESS: () => {
    console.log("created project");
    return state;
  },
  CREATE_PROJECT_ERROR: () => {
    console.log("create project error");
    return state;
  },
  default: ()=>{
    console.log("Do default stuff if all else failed");
    return state;
  }
}[action.type || 'default'];
runF();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...