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

时间:2014-11-03 05:21:05

标签: javascript

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

有没有更快的方法来比较两个变量并根据它输出一些东西?

谢谢!

4 个答案:

答案 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;
&#13;
&#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)创建一个查找表,或者在键前加上以防止此类冲突。