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