typescript - Reestructurar la declaración switch-case en código JavaScript
¿Cómo puedo refactorizar este código para que pueda evitar la repetición de dailogObj.image? Habría escrito una declaración return si no fuera por el caso 5, donde tengo dos asignaciones.
getDialogData(imageNum): any {
const dailogObj = {
image: '',
buttonName: 'Learn More'
};
switch (imageNum) {
case 1:
dailogObj.image = '../../../assets/images/Red-Image.png';
break;
case 2:
dailogObj.image = '../../../assets/images/blue-image-orgl.png';
break;
case 3:
dailogObj.image = '../../../assets/images/Green-Image-2.png';
break;
case 4:
dailogObj.image = '../../../assets/images/Gold-Image.png';
break;
case 5:
dailogObj.image = '../../../assets/images/green-img-orgl.png';
dailogObj.buttonName = 'Read Her Story';
break;
case 6:
dailogObj.image = '../../../assets/images/Red-Image-2.png';
break;
case 7:
dailogObj.image = '../../../assets/images/Blue-Image-2.png';
break;
case 8:
dailogObj.image = '../../../assets/images/Gold-Image-2.png';
break;
}
return dailogObj;
}
Respuesta #1
Podrías extraer esa asignación a su propia condición y simplemente usar un arreglo para establecer la propiedad image:
getDialogData(imageNum): any {
const dailogObj = {
image: '',
buttonName: 'Learn More'
};
// Handle the default case if imageNum is not in range [1..9]
if (imageNum >=1 && imageNum <=9) {
// Special treatment of image number 5
if (imageNum == 5) {
dailogObj.buttonName = 'Read Her Story';
}
// If it is in range, pick the right image:
var images =
['../../../assets/imfages/Red-Image.png',
'../../../assets/images/blue-image-orgl.png',
'../../../assets/images/Green-Image-2.png',
'../../../assets/images/Gold-Image.png',
'../../../assets/images/green-img-orgl.png',
'../../../assets/images/Red-Image-2.png',
'../../../assets/images/Blue-Image-2.png',
'../../../assets/images/Gold-Image-2.png'];
dailogObj.image = images[imageNum - 1];
}
return dailogObj;
}
Respuesta #2
images = {
1: '../../../assets/images/Red-Image.png',
2: '../../../assets/images/blue-image-orgl.png',
...
8: '../../../assets/images/Gold-Image-2.png'
};
dailogObj.image = images[imageNum];
dailogObj.buttonName = imageNum == 5 ? 'Read Her Story' : 'Learn More';
O podrías crear otro objeto para almacenar nombres de botones, al igual que rutas de imágenes.
