сопоставление с typescript (javascipt) с объектом

#javascript #arrays #json #angular #typescript

#javascript #массивы #json #угловой #typescript

Вопрос:

здравствуйте, я хотел бы создать карту на основе этих if .. есть ли способ создать карту и написать лучший код?

 findViewDetailPolicy(policy) {
        if (policy['displayInfo']['displayTypeDetail']['displayType'] === 'STANDARD') {
          this.path = this.policyPathDetailStandard;
          this.router.navigate([this.path]);
        }
        if (policy['displayInfo']['displayTypeDetail']['displayType'] === 'PACCHETTO') {
          this.path = this.policyPathDetailModulare;
          this.router.navigate([this.path]);
        }
        if (policy['displayInfo']['displayTypeDetail']['displayType'] === 'SAVING') {
          this.path = this.policyPathDetailSaving;
          this.router.navigate([this.path]);
        }
        if (policy['displayInfo']['displayTypeDetail']['displayType'] === 'CQ') {
          this.path = this.policyPathDetailCq;
          this.router.navigate([this.path]);
        }
        if (policy['displayInfo']['displayTypeDetail']['displayType'] === 'COLLETTIVA') {
          this.path = this.policyPathDetailCollective;
          this.router.navigate([this.path]);
        }
      }
  

Комментарии:

1. случай переключения мог бы выполнить эту работу. Проверьте документы. w3schools.com/js/js_switch.asp

2. не сопоставление, но лучший способ — попытаться поместить policy['displayInfo']['displayTypeDetail']['displayType'] в переменную и записать эти условия гораздо лучшим способом

Ответ №1:

Ваш код может быть сведен к:

 findViewDetailPolicy(policy) {
    const map = { STANDARD: this.policyPathDetailStandard, ... };
    this.path = map[policy['displayInfo']['displayTypeDetail']['displayType']];
    this.router.navigate([this.path]);
}
  

Ответ №2:

Карта может быть такой:

 const mapToPathProp = {
    STANDARD: "policyPathDetailStandard",
    PACCHETTO: "policyPathDetailModulare",
    SAVING: "policyPathDetailSaving",
    CQ: "policyPathDetailCq",
    COLLETTIVA: "policyPathDetailCollective"
};
  

И затем:

 findViewDetailPolicy(policy) {
    let pathProp = mapToPathProp[policy.displayInfo.displayTypeDetail.displayType];
    if (pathProp) {
        this.path = this[pathProp];
        this.router.navigate([this.path]);
    }
}
  

Комментарии:

1. const mapToPathProp = { СТАНДАРТ: «policyPathDetailStandard», PACCHETTO: «policyPathDetailModulare», СОХРАНЕНИЕ: «policyPathDetailSaving», CQ: «policyPathDetailCq», COLLETTIVA: «policyPathDetailCollective»};

2. в этом объекте .. с помощью какого метода вы передаете свойство path в object

3. Я не понимаю, о чем вы спрашиваете. pathProp будет, например, «polidyPathDetailStandard», и this[pathProp] тогда все будет так, как если бы вы сделали this.polidyPathDetailStandard . Проясняет ли это? Преимущество этого метода в том, что вы создаете сопоставление только один раз, а не при каждом вызове вашей функции. Кроме того, принятый ответ не имеет такого же поведения, как ваш код, когда нет соответствия ни одному из if условий.