我正在写一个'塔罗牌'读卡器,我已经到了必须添加'预测'的部分。 唯一的问题是,我已经意识到将会有40多种可能的答案。
有没有更快的方法来比较两个变量并根据它输出一些东西?
谢谢!
答案 0 :(得分:1)
将数据存储在可以根据两个变量的相应值遍历的层次结构中。这样确定值就像取消引用对象一样简单:options[variable1][variable2]
。请参阅下面的示例。
在代码段中,两个下拉菜单控制两个变量的值。
var options = {
"A": { "C": 1, "D": 2 },
"B": { "C": 3, "D": 4 }
}
$(function() {
$("#dd1, #dd2").change(function() {
var opt1 = $("#dd1").val();
var opt2 = $("#dd2").val();
var value = options[opt1][opt2];
$("#result").text(value);
});
$("#dd1").change();
});

<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<select id="dd1">
<option>A</option>
<option>B</option>
</select>
<select id="dd2">
<option>C</option>
<option>D</option>
</select>
<div id="result"></div>
&#13;
答案 1 :(得分:0)
使用查找表并循环遍历所有答案。您可能希望使用coffeescript或lodash来处理循环
答案 2 :(得分:0)
我不知道你试图实现什么算法,你没有提供它。但是如果你正在查找卡片值,那么对象就是一个解决方案:
// 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;
}
也许结果的值映射到一些sage建议,使用另一个对象。也许甚至可以随机选择其中一条说5条类似的建议。
答案 3 :(得分:0)
也许像查找表:
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)
创建一个查找表,或者在键前加上以防止此类冲突。