Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/151.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript switch/if-else语句的替代方案?_Javascript - Fatal编程技术网

Javascript switch/if-else语句的替代方案?

Javascript switch/if-else语句的替代方案?,javascript,Javascript,我正在写一个“塔罗牌”读卡器,我已经到了必须添加“预测”的部分。 唯一的问题是,我意识到将会有40多个可能的答案 是否有一种更快的方法来比较两个变量,并在此基础上输出一些东西,而不是编写40多个开关案例 谢谢 将数据存储在层次结构中,您可以根据两个变量的各自值进行遍历。确定值的方法与取消对对象的引用一样简单:options[variable1][variable2]。请参见下面的示例 在代码段中,两个下拉列表控制两个变量的值 var选项={ “A”:{“C”:1,“D”:2}, “B”:{“C

我正在写一个“塔罗牌”读卡器,我已经到了必须添加“预测”的部分。 唯一的问题是,我意识到将会有40多个可能的答案

是否有一种更快的方法来比较两个变量,并在此基础上输出一些东西,而不是编写40多个开关案例


谢谢

将数据存储在层次结构中,您可以根据两个变量的各自值进行遍历。确定值的方法与取消对对象的引用一样简单:
options[variable1][variable2]
。请参见下面的示例

在代码段中,两个下拉列表控制两个变量的值

var选项={
“A”:{“C”:1,“D”:2},
“B”:{“C”:3,“D”:4}
}
$(函数(){
$(“#dd1,#dd2”).change(function(){
var opt1=$(“#dd1”).val();
var opt2=$(“#dd2”).val();
var值=期权[opt1][opt2];
$(“#结果”)。文本(值);
});
$(“#dd1”).change();
});

A.
B
C
D

使用查找表并循环查找所有答案。您可能想使用coffeescript或lodash来处理循环

我不知道您试图实现什么算法,您还没有提供它。但如果您正在查找卡片值,则对象是一种解决方案:

// cards is an array of cardNames to get the value of
function getValues(cards) {
  var values = {
    cardName0: value,
    cardName1: value,
    cardName2: value,
    ...
  }
  var result = 0; // String? Number?

  for (var i=0, iLen=cards.length; i<iLen; i++) {
    result += values[cards[i]];
  }

  return result;
}
//cards是用于获取值的卡片名数组
函数值(卡片){
var值={
cardName0:值,
cardName1:值,
cardName2:值,
...
}
var result=0;//字符串?数字?

对于(var i=0,iLen=cards.length;i可能类似于查找表:

var tarotLookup={
  death:"something bad going to happen!",
  hermit:"so lonely!",
  pope:"",
  moon:"spoooky!"
};
var tarotResults=["death","hermit","pope","moon"];
var predictions=tarotResults.map(function(id){
  var msg=tarotLookup[id];  
  return  [id,msg?msg:"(no entry)"].join(": "); 
});
predictions.join("\n");

//output result:
/*
death: something bad going to happen!
hermit: so lonely!
pope: (no entry)
moon: spoooky!
*/

您需要确保没有一个键与对象原型中的属性/方法名称意外匹配(这可能不是塔罗牌名称的问题)。在这种情况下,从
Object.create(null)创建一个查找表
或为键添加前缀以防止此类冲突。

另一种方法是使用表。例如,该表可以有一系列预期结果,然后是相应的答案。根据数据的设置方式,您可能可以使用类似的循环。如果条件非常独特,您将看到许多条件staTementsallways惊讶于关于基本ECMAScript的问题如何提示依赖于DOM库的答案。@RobG答案与DOM库无关。答案是在JS对象中布局数据并进行相应的引用。DOM库纯粹用于演示,因为键入
document.getElementById
更费力>$(“#…”)
。尽管我刚刚做了…(“#dd1”).val()与
这个.value
一样更简单、更快,所以节省了一些键入时间。:-)但OP甚至没有提到“DOM”,显然该部分已经排序(如果需要的话)@RobG-Maybe——这个问题完全是模糊的,所以我希望一个可运行的解决方案可以帮助OP更好地理解这个解决方案(因为对象中没有实际的数据)。更改处理程序以这种方式肯定更简洁!谢谢你,nbrooks!我能够轻松理解这一点,并根据需要进行修改。