машинопись - заменить функцию карты - PullRequest
0 голосов
/ 25 октября 2018

У меня ниже const и Model,

export const Motors  = {
 Cars: [
  {'name': 'BMW', 'selected': true},
  {'name': 'Audi', 'selected': true}
 ],
 Trucks: [
  {'name': 'F150', 'selected': true},
  {'name': 'z320', 'selected': true}
 ]
};

Model,

export interface SomeCarRelatedModel {
 abc: string;
 def: string;
}

export interface SomeTruckRelatedModel {
 xyz: string;
 uvw: string;
}

Я делаю простую функцию карты, чтобы проверить, существует ли свойство abc и содержит ли значение, если это так, установитевыбрано значение 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 голосов
/ 25 октября 2018

Аккуратный !!: 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)    
            ));
}
0 голосов
/ 25 октября 2018

вы можете сделать это:

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;
  }


}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...