2012-04-11 162 views
1

我是JavaScript新手,很抱歉,我不太瞭解。我有以下幾點,我想簡化一下。任何建議,將不勝感激。可以簡化此JavaScript嗎?

if (entity == "house") { 
    primaryKey = store.getItem('accountID') + "02" + "00"; 
    table = "Content"; 
} 
if (entity == "street") { 
    primaryKey = store.getItem('accountID') + "0000"; 
    table = "Content"; 
} 
if (entity == "city") { 
    var primaryKey = store.getItem('categoryID'); 
    table = "Reference"; 
} 
if (entity == "location") { 
    primaryKey = "0001" + store.getItem('examID'); 
    table = "Content"; 
} 
+1

使用像這樣的開關命令http://www.w3schools.com/js/js_switch.asp – devtut 2012-04-11 05:58:13

回答

7

你可以用表驅動的方法和這樣的沒有重複代碼(DRY)做到這一點:

var lookupInfo = { 
    house: {id: "accountID", prefix, "", suffix: "0200", table: "Content"}, 
    street: {id: "accountID", prefix: "", suffix: "0000", table: "Content"}, 
    city: {id: "categoryID", prefix: "", suffix: "", table: "Reference"}, 
    location: {id: "examID", prefix: "0001", suffix: "", table: "Content"} 
}; 

var primaryKey, data = lookupInfo[entity]; 
if (data) { 
    primaryKey = data.prefix + store.getItem(data.id) + data.suffix; 
    table = data.table; 
} 

除了最小的代碼,而不是重複任何代碼,它也很容易給更多的選項添加到表無需編寫任何附加代碼。


或者,數據表可以做一個小更緊湊,雖然不是很優雅(從視圖因爲硬編碼的常數的純粹的編程點)是這樣的:

var lookupInfo = { 
    house: ["accountID", "", "0200", "Content"], 
    street: ["accountID", "", "0000", "Content"], 
    city: ["categoryID", "", "", "Reference"], 
    location: ["examID", "0001", "", "Content"] 
}; 

var primaryKey, data = lookupInfo[entity]; 
if (data) { 
    primaryKey = data[1] + store.getItem(data[0]) + data[2]; 
    table = data[3]; 
} 

無論採用哪種方式,您都可以使用查詢表作爲實體,然後使用表驅動方法爲每個實體使用不同的值。

3

您可以使用switch語句。 https://developer.mozilla.org/en/JavaScript/Reference/Statements/switch

var primaryKey; 
var table = "Content"; 
switch (entity) { 
    case "house": 
     primaryKey = store.getItem('accountID') + "0200"; 
     break; 
    case "street": 
     primaryKey = store.getItem('accountID') + "0000"; 
     break; 
    case "city": 
     primaryKey = store.getItem('categoryID'); 
     table = "Reference"; 
     break; 
    case "location": 
     primaryKey = "0001" + store.getItem('examID'); 
     break; 
    default: 
     // do nothing 
} 

這仍然是冗長的,但更容易閱讀。

+0

謝謝。我需要在第一行聲明primaryKey嗎?我以爲我已經讀過一些地方,塊內的JavaScript變量也可以在塊後看到? – 2012-04-11 06:17:44

+0

您可以在每個case語句內聲明primaryKey。如果你這樣做,只要確保你在每個case語句中用var聲明變量(例如var primaryKey = ...),因爲你不知道哪個語句將實例化變量。通過在switch語句之外聲明它,你只需要在一個地方聲明變量。 – 2012-04-11 14:28:42