这是我正在做的事情的 super 简化版本,但想象一下需要在 switch 语句中对一个对象执行多个验证。在验证过程中的任何时候,我们都可能决定不想继续使用该对象。
愚蠢的例子:
var yummies = [
{name: 'apples', quantity: 3},
{name: 'apples', quantity: 4}
];
var purchases = [];
for (var i = 0; i < yummies.length; i++) {
var yummy = yummies[i];
switch (yummy.name) {
case 'apples':
if (purchases.indexOf(yummy.name) > -1) {
break;
}
//A ton of other code including, possibly other breaks
purchases.push(yummy.name);
break;
}
}
return
将不起作用,因为我仍想继续循环。我想我可以使用 continue
语句可以工作,但在 switch/case
中看到 continue
看起来真的不太对劲。
无论如何,在一个case
中有两个break
。有什么理由不这样做?
最佳答案
当然这只是一个意见,但我不认为它本身是坏的。但是,嵌套的情况、if 和其他控制结构不会使您的代码具有很好的可读性。在这种情况下,您可能会考虑将代码片段移动到单独的函数中。
因此您的代码可能如下所示:
function purchaseApple(yummyName) {
if (purchases.indexOf(yummyName) == -1) {
purchases.push(yummyName);
}
}
for (var i = 0; i < yummies.length; i++) {
var yummy = yummies[i];
switch (yummy.name) {
case 'apples':
purchaseApples(yummy.name);
break;
}
}
或者甚至可以将条件也移动到函数中:
function tryPurchaseApple(yummyName) {
if (yummyName == 'apples' && purchases.indexOf(yummyName) == -1) {
purchases.push(yummyName);
}
}
for (var i = 0; i < yummies.length; i++) {
var yummy = yummies[i];
tryPurchaseApple(yummy.name);
tryPurchasePears(yummy.name);
}
当然,这些只是建议。很难从这种情况中举出一个明智的例子,没有冒犯。 ;)
关于javascript - 一个案例有多个中断是不好的做法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32791236/