Reputation: 313
I have below const and 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;
}
I am doing simple map function to check if abc property exists and contains value, if so set the selected to true else false and so on for other properties as well.
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;
}
});
}
My code inside ngOnint method involves lot of if statement. Can this modified to better and cleaner code?
Upvotes: 0
Views: 1290
Reputation: 1840
Neat!! :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;
}
}
OR Shorter
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)
));
}
Upvotes: 1
Reputation: 90
you can do this:
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;
}
}
Upvotes: 1