打字稿-替换地图功能

时间:2018-10-25 03:34:30

标签: typescript rxjs

我下面有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语句。可以将其修改为更好,更干净的代码吗?

2 个答案:

答案 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)    
            ));
}

相关问题