Issue
currentAlbum: string | undefined;
video: any = { id: 'TYYW_WwYHuM' };
I am trying to improve my code where i wrote a long ugly switch, and i would like to turn it into an object with better syntax.
But I wonder, why if I write this in the function it works:
takeVideo(currentAlbum: string | undefined): void {
switch (this.currentAlbum) {
case 'the red hot chili peppers':
this.video.id = 'yOYmdyaSOCg';
break;
case 'Freaky Styley':
this.video.id = '3Z4JUqA_bKE';
break;
case 'The Uplift Mofo Party Plan':
this.video.id = 'a8DPkw5Nc64';
break;
case "Mother's Milk":
this.video.id = 'HZySqMlEuSQ';
break;
case 'Blood Sugar Sex Magik':
this.video.id = 'Mr_uHJPUlO8';
break;
case 'One Hot Minute':
this.video.id = 'vV8IAOojoAA';
break;
case 'Californication':
this.video.id = 'mzJj5-lubeM';
break;
case 'By the Way':
this.video.id = 'JnfyjwChuNU';
break;
case 'Stadium Arcadium':
this.video.id = 'oDNcL1VP3rY';
break;
case "I'm with You":
this.video.id = 'qOgFHMEJMeY';
break;
case 'The Getaway':
this.video.id = 'Q0oIoR9mLwc';
break;
default:
this.video.id = 'TYYW_WwYHuM';
}
}
But if I write this, which should be best practice, doesn't it work?
takeVideo(currentAlbum: string | undefined): void {
const videos = {
'the red hot chili peppers': (this.video.id = 'yOYmdyaSOCg'),
'Freaky Styley': (this.video.id = '3Z4JUqA_bKE'),
'The Uplift Mofo Party Plan': (this.video.id = 'a8DPkw5Nc64'),
"Mother's Milk": (this.video.id = 'HZySqMlEuSQ'),
'Blood Sugar Sex Magik': (this.video.id = 'Mr_uHJPUlO8'),
'One Hot Minute': (this.video.id = 'vV8IAOojoAA'),
'Californication': (this.video.id = 'mzJj5-lubeM'),
'By the Way': (this.video.id = 'JnfyjwChuNU'),
'Stadium Arcadium': (this.video.id = 'oDNcL1VP3rY'),
"I'm with You": (this.video.id = 'qOgFHMEJMeY'),
'The Getaway': (this.video.id = 'Q0oIoR9mLwc'),
};
return videos[currentAlbum] ?? this.video.id;
}
Solution
First, using the object instead of the switch statement is not the best practice.
It depends on where you use it.
Second, you should use functions with assignments instead of assignments. That is
takeVideo(currentAlbum: string | undefined): void {
const videos = {
'the red hot chili peppers': function() { this.video.id = 'yOYmdyaSOCg'; return this.video.id; },
'Freaky Styley': function() { this.video.id = '3Z4JUqA_bKE'; return this.video.id; },
'The Uplift Mofo Party Plan': function() { this.video.id = 'a8DPkw5Nc64'; return this.video.id; },
"Mother's Milk": function() { this.video.id = 'HZySqMlEuSQ'; return this.video.id; },
'Blood Sugar Sex Magik': function() { this.video.id = 'Mr_uHJPUlO8'; return this.video.id; },
'One Hot Minute': function() { this.video.id = 'vV8IAOojoAA'; return this.video.id; },
'Californication': function() { this.video.id = 'mzJj5-lubeM'; return this.video.id; },
'By the Way': function() { this.video.id = 'JnfyjwChuNU'; return this.video.id; },
'Stadium Arcadium': function() { this.video.id = 'oDNcL1VP3rY'; return this.video.id; },
"I'm with You": function() { this.video.id = 'qOgFHMEJMeY'; return this.video.id; },
'The Getaway': function() { this.video.id = 'Q0oIoR9mLwc'; return this.video.id; },
};
return videos[currentAlbum] ? videos[currentAlbum]() : this.video.id;
}
This is because the assignments of your code are all executed when defining videos
.
And now, I think this code is much better than what you tried to do
takeVideo(currentAlbum: string | undefined): void {
const videos = {
'the red hot chili peppers': 'yOYmdyaSOCg',
'Freaky Styley': '3Z4JUqA_bKE',
'The Uplift Mofo Party Plan': 'a8DPkw5Nc64',
"Mother's Milk": 'HZySqMlEuSQ',
'Blood Sugar Sex Magik': 'Mr_uHJPUlO8',
'One Hot Minute': 'vV8IAOojoAA',
'Californication': 'mzJj5-lubeM',
'By the Way': 'JnfyjwChuNU',
'Stadium Arcadium': 'oDNcL1VP3rY',
"I'm with You": 'qOgFHMEJMeY',
'The Getaway': 'Q0oIoR9mLwc',
};
this.video.id = videos[currentAlbum] ?? this.video.id;
return this.video.id;
}
Answered By - Naetmul
0 comments:
Post a Comment
Note: Only a member of this blog may post a comment.