[英]How to refactor function with observable
How can I refactor this part of code?如何重构这部分代码? I want to reduce the amount of 'else if' statements.
我想减少“else if”语句的数量。 I tried to use ||
我尝试使用 || operator, but it's doesn't work.
运算符,但它不起作用。
getNominieesByStage(stage_key: string): Observable<any> {
const simpleObservable$ = new Observable<any>((observer) => {
if (stage_key === 'key1') {
observer.next(NOMINIEES[`${stage_key}`]);
} else if (stage_key === 'key2') {
observer.next(NOMINIEES[`${stage_key}`]);
} else if (stage_key === 'key3') {
observer.next(NOMINIEES[`${stage_key}`]);
} else if (stage_key === 'key4') {
observer.next(NOMINIEES[`${stage_key}`]);
} else if (stage_key === 'key5') {
observer.next(NOMINIEES[`${stage_key}`]);
} else if (stage_key === 'key6') {
observer.next(NOMINIEES[`${stage_key}`]);
} else {
observer.next([NOMINIEES[`${stage_key}`]]);
}
// observable execution
observer.complete();
});
return simpleObservable$;
}
Your code is currently functionaly equivalent to:您的代码目前在功能上等同于:
const simpleObservable$ = new Observable<any>((observer) => {
observer.next(NOMINIEES[`${stage_key}`]);
observer.complete();
}
return observer;
Without any if
statement.没有任何
if
语句。
Also, this can be simplified further by static Observable creation methods:此外,这可以通过 static Observable 创建方法进一步简化:
return Rx.Observable.of(NOMINIEES[`${stage_key}`]);
create an array of keys and return values then use find
创建一个键数组并返回值,然后使用
find
var v = someKeyValueTypeArray.find(x=>x == 'key1').someReturnValue;
observer.next(v);
observer.complete();
use instead of connected if-statements a switch case -element:使用switch case元素代替连接的 if 语句:
switch(stage_key) {
case 'key1','key2','key3': {
observer.next(NOMINIEES[`${stage_key}`]);
break;
}
default: {
//statements;
break;
}
}
You could test for a regular expression like你可以测试一个正则表达式,比如
if(/^key[1-6]/.test(stage_key)) {
observer.next(NOMINIEES[`${stage_key}`]);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.