我正在寫'塔羅牌'讀卡器,我已經到了必須添加'預測'的部分。 唯一的問題是,我意識到將會有40多個可能的答案。替代開關/ if else語句?
而不是寫40+開關的情況下,有沒有更快的方法來比較兩個變量和輸出的東西呢?
謝謝!
我正在寫'塔羅牌'讀卡器,我已經到了必須添加'預測'的部分。 唯一的問題是,我意識到將會有40多個可能的答案。替代開關/ if else語句?
而不是寫40+開關的情況下,有沒有更快的方法來比較兩個變量和輸出的東西呢?
謝謝!
將您的數據存儲在可根據兩個變量的相應值進行遍歷的分層結構中。通過這種方式確定數值就像解引用對象一樣簡單: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>
總是驚訝於關於基本ECMAScript的問題如何提示依賴於DOM庫的答案。 – RobG 2014-11-03 06:11:47
@RobG答案與DOM庫無關。答案是將數據放在JS對象中並相應地引用。 DOM庫純粹用於演示,因爲鍵入'document.getElementById'比'$(「#...」)'更有效。儘管我只是做了它... – nbrooks 2014-11-03 06:14:16
'$(「#dd1」)。val()'更簡單快捷,因爲'this.value',所以可以省去一些鍵入。 :-)但是OP甚至沒有提到「DOM」,顯然這個部分是分類的(如果需要的話)。 – RobG 2014-11-03 06:22:17
通過所有的答案使用一個查找表和循環。你可能想用咖啡或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;
}
也許結果映射到一些明智的建議值,使用另一個對象。也許甚至可以隨機選擇其中一條說5條類似的建議。
也許就像一個查找表:
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)
製作查找表,或在密鑰前加上以防止發生這種衝突。
另一種方法是使用表格。例如,該表可以具有預期結果的範圍,然後是相應的答案。 – 2014-11-03 05:23:50
取決於您的數據設置方式,您可以使用類似的循環。如果條件非常獨特,那麼您正在查看大量條件語句 – 2014-11-03 05:24:03