#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
условий.