我下面有const和Model,
export const Motors = {
Cars: [
{'name': 'BMW', 'selected': true},
{'name': 'Audi', 'selected': true}
],
Trucks: [
{'name': 'F150', 'selected': true},
{'name': 'z320', 'selected': true}
]
};
型号
export interface SomeCarRelatedModel {
abc: string;
def: string;
}
export interface SomeTruckRelatedModel {
xyz: string;
uvw: string;
}
我正在执行简单的地图功能,以检查abc属性是否存在并包含值,如果是,则将selected设置为true,否则将false设置为其他属性。
public motors = Motors //exported and assigned to local variable
ngOnint() {
this.motors.Cars.map(m => {
if(m.name === 'BMW'){
m.selected = this.someCarRelateadModel.abc ?
this.someCarRelateadModel.abc.length > 0 ? true : false;
} else if(m.name === 'Audi'){
m.selected = this.someCarRelateadModel.def ?
this.someCarRelateadModel.def.length > 0 ? true : false;
}
});
this.motors.Trucks.map(m => {
if(m.name === 'F150'){
m.selected = this.someTruckRelateadModel.xyz ?
this.someTruckRelateadModel.xyz.length > 0 ? true : false;
} else if(m.name === 'z320'){
m.selected = this.someTruckRelateadModel.uvw ?
this.someCarRelateadModel.uvw.length > 0 ? true : false;
}
});
}
我在ngOnint方法中的代码涉及很多if语句。可以将其修改为更好,更干净的代码吗?
答案 0 :(得分:1)
您可以执行以下操作:
ngOnint() {
this.dealMotors()
}
private dealMotors(){
this.motors.forEach((item, i , obj)=>{
item.forEach(element=>{
this.dealTraffic()
})
})
}
private dealTraffic(m){
switch(m.name){
case 'BMW':
m.selected = this.someCarRelateadModel.abc ?
this.someCarRelateadModel.abc.length > 0 ? true : false;
break;
case 'Audi':
m.selected = this.someCarRelateadModel.def ?
this.someCarRelateadModel.def.length > 0 ? true : false;
break;
case 'F150':
m.selected = this.someTruckRelateadModel.xyz ?
this.someTruckRelateadModel.xyz.length > 0 ? true : false;
break;
case 'z320':
m.selected = this.someTruckRelateadModel.uvw ?
this.someCarRelateadModel.uvw.length > 0 ? true : false;
}
}
答案 1 :(得分:1)
整齐!! :D
ngOnint() {
this.dealMotors();
}
private dealMotors(){
Object.keys(this.motors)
.forEach(motorType => motorType.forEach(this.dealTraffic));
}
private dealTraffic(m){
switch(m.name){
case 'BMW':
m.selected = this.someCarRelateadModel.abc && this.someCarRelateadModel.abc.length;
break;
case 'Audi':
m.selected = this.someCarRelateadModel.def && this.someCarRelateadModel.def.length;
break;
case 'F150':
m.selected = this.someTruckRelateadModel.xyz && this.someTruckRelateadModel.xyz.length;
break;
case 'z320':
m.selected = this.someTruckRelateadModel.uvw && this.someCarRelateadModel.uvw.length;
}
}
或更短
motorPropMap = {
BMW:'abc',
Audi:'def',
F150:'xyz',
z320:'uvw'
}
ngOnint() {
this.dealMotors();
}
private dealMotors(){
Object.keys(this.motors)
.forEach(motorType => motorType.forEach(
motor => (motor.selected =
this.someCarRelateadModel[this.motorPropMap[motor.name]] &&
this.someCarRelateadModel[this.motorPropMap[motor.name]].length)
));
}