[英]Is there a better way to write this javascript?
有沒有更好的方法來編寫這個JavaScript?
switch (l) {
//A
case '1-1-1':
case '1-1-2':
case '1-2-1':
case '2-1-1':
case '3-1-1':
obj.result = 'A';
break;
//B
case '1-2-2':
case '1-2-3':
case '2-2-2':
case '2-2-3':
case '3-2-2':
case '3-3-1':
obj.result = 'B';
break;
//C
case '1-3-2':
case '1-3-3':
case '2-3-2':
case '3-2-3':
obj.result = 'C';
break;
//D
case '3-3-2':
case '3-3-3':
obj.result = 'D';
break;
default:
obj.result = 'AA';
break;
}
如果您告訴我們您是如何獲得這些值的,我們可能會提出一個更簡潔的解決方案,但這里是您使用查找表(生成的向后)的方式:
var byResult={
A: ['1-1-1', '1-1-2', /* ... */],
B: ['1-2-2', '1-2-3', /* ... */],
/* ... */
};
var byInput={};
for(var output in byResult) {
if(!Object.prototype.hasOwnProperty.call(byResult, output)) {
continue;
}
var inputs=byResult[output];
for(var i=0, l=inputs.length; i<l; i++) {
var input=inputs[i];
byInput[input]=output;
}
}
function lookup(value) {
if(Object.prototype.hasOwnProperty.call(byInput, value)) {
return byInput[value];
}else{
return 'AA';
}
}
Thilo在評論中提到的查找表:
var lookup =
{
'1-1-1': 'A',
'1-1-2': 'A',
'1-2-1': 'A',
'2-1-1': 'A',
'3-1-1': 'A',
'1-2-2': 'B',
'1-2-3': 'B',
'2-2-2': 'B',
'2-2-3': 'B',
'3-2-2': 'B',
'3-3-1': 'B',
'1-3-2': 'C',
'1-3-3': 'C',
'2-3-2': 'C',
'3-2-3': 'C',
'3-3-2': 'C',
'3-3-3': 'D'
};
及其用法:
obj.result = lookup[l] || 'AA';
我不能說這真的比switch
版本更好。
將數字封裝到函數中的字母處理中,這樣您的主代碼就不需要知道翻譯是如何完成的。 像這樣稱呼它:
obj.result = getThing(l);
// or, given your comment that l is formed by concatenating three
// values you could do the concatenation in the function
obj.result = getThing(v1, v2, v3);
然后在getThing()
您可以使用現有的switch語句,或Matt Ball的答案中的查找表,或者您喜歡的任何其他方法。 並且您可以隨時更改方法,而不會影響調用該函數的代碼。
function getThing(v1, v2, v3) {
var l = v1 + "-" + v2 + "-" + v3;
// use lookup, switch, whatever
return "somecode";
}
注意:實際上不要將您的函數稱為“getThing”; 將“Thing”替換為描述這些字母代碼實際上是什么的東西。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.