我有一种情况使用switch
来过滤掉一个大数组。它就像
var myArray = ['a','b','c','d'];
$.each( myArray, function (ind, elem) {
switch (true) {
case (elem === 'a'):
// do something to a
break;
case (elem === 'b'):
// do something to b (but not to a)
break;
always: // do this if we have done something
alert('we have done something!');
}
});
所以我希望a
和b
发出警报,但不希望c
或d
发出警告。
有没有办法实现这个目标?
答案 0 :(得分:4)
首先,我会更恰当地写出switch
:
switch (elem) {
case 'a':
// 'a' code
break;
case 'b':
// 'b' code
break;
default:
// anything else
}
请注意,它是您正在寻找的default
标签。另一方面,如果你只是想在匹配时做某事,那么switch
可能不是最干净的方法,因为没有一种好的方法来为每个案例包含样板代码(除了只需复制/粘贴)。
您可以使用单独的函数,并且可以构造函数以便设置标志:
var didSomething = false;
function doSomething(fn) {
fn();
didSomething = true;
}
switch (elem) {
case 'a':
doSomething(function() { /* 'a' code */ });
break;
case 'b':
doSomething(function() { /* 'b' code */ });
break;
}
if (didSomething) {
alert("did something");
}
或者,您可以制作地图:
var actions = {
'a': function() { /* 'a' code */ },
'b': function() { /* 'b' code */ }
};
if (actions[elem]) {
actions[elem]();
alert("did something");
}