我需要动态地将案例添加到交换机。我希望用户能够添加项目,每个项目都需要它自己的开关案例。
答案 0 :(得分:10)
您可以使用带回调函数的对象:
add('something', function() {
// case for something
});
您可以使用以下方式添加新条目:
for($x = 0 ; $x < 50 ; $x++){
if(($orders[$x]['paymentStatus'] == 'paid') || ($orders[$x]['paymentIsPost'] == true)){
if($orders[$x]['id'] == $parcels[$x]['data']['seoshop_order_id']){
echo '<pre>';
var_export($orders[$x]['id']);
var_export($orders[$x]['lastname']);
var_export($orders[$x]['paymentStatus']);
var_export($orders[$x]['paymentIsPost']);
var_export($parcels[$x]['name']);
var_export($parcels[$x]['data']['seoshop_order_id']);
echo '</pre>';
}
}
}
答案 1 :(得分:1)
这不是最终解决方案,但如果您的自定义案例数量有限,则可以正常使用:
您设置了一个具有一定数量选项的数组(让我们说2):
var cases = [false, false];
现在您可以动态更改此数组的值,并且交换机中的案例将遵循:
switch(condition) {
case cases[0]:
doStuff();
break;
case cases[1]:
doSomethingElse();
break;
}
您可以点击上面的代码段以查看其有效;)
var cases = [false, false]; // so that is not undefined
$('#option1').click( function() {
cases = [38,37];
});
$('#option2').click( function() {
cases = [39,40];
});
$(window).keydown( function(e) {
switch (e.keyCode) {
case 32:
$("body").append('space<br>');
break;
case cases[0]:
$("body").append((e.keyCode == '38' ? 'UP' : 'RIGHT' ) + '<br>');
break;
case cases[1]:
$("body").append((e.keyCode == '37' ? 'LEFT' : 'DOWN' ) + '<br>');
break;
}
});
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
At the begining the switch only take in account SPACE keyCode<br>
-if you click option1 then it recognize UP and LEFT<br>
-if you click option2, the aboves are replaced with RIGHT and DOWN<br><br>
<div id='option1'>OPTION 1</div>
<div id='option2'>OPTION 2</div>
&#13;
答案 2 :(得分:0)
您可以使用 Object
来切换案例。在这种情况下使用 Object
而不是 Array
的优点之一是它大大减少了由 Array
中的错误索引引起的错误。对案例使用 Object
,您还可以将案例值提取到另一个脚本中。这对 Single Responsibility Principle 有帮助,因为您只需要在 switch case 中实现业务逻辑,而不必担心维护正确的 case 值。
const OP = {
ADD: 'ADD',
MULTIPLY: 'MULTIPLY',
};
const choice = 'ADD';
switch (choice) {
case OP.ADD:
console.log('You chose add');
break;
case OP.MULTIPLY:
console.log('You chose multiply');
break;
default:
console.log('Operation is not defined');
}
答案 3 :(得分:0)
you can create a custom switch statement as shown below,
var callbackArr = [];
function customSwitch(casestmt, callback){
var callbackObj = {};
callbackObj['cs'] = casestmt;
callbackObj['clbkfn'] = callback;
callbackArr.push(callbackObj);
}
function switchExecute(condition) {
return callbackArr[callbackArr.findIndex(data => data.cs ===condition)].clbkfn();
}
jobs = [{'jobname': 'job1'},{'jobname': 'job2'}, {'jobname': 'job3'},{'jobname': 'job4'} ];
jobs.forEach((job)=> {
customSwitch(job.jobname, ()=> {console.log(job.jobname)});
});
switchExecute(args[0]);