2012-04-11 13 views
1

Ich bin neu in Javascript so tut mir leid, weiß ich nicht sehr viel. Ich habe folgendes und ich möchte es einfacher machen. Jeder Vorschlag wäre willkommen.Ist es möglich, dieses Javascript zu vereinfachen?

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

Verwenden Sie eine Schalterstatement wie dieses http://www.w3schools.com/js/js_switch.asp – devtut

Antwort

7

Man könnte es mit einem Tisch orientierten Ansatz tun und ohne wiederholte Code (DRY) wie folgt aus:

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; 
} 

Neben den Code zu minimieren und keinen Code zu wiederholen, es ist auch einfach mehr Optionen auf den Tisch hinzufügen ohne zusätzlichen Code zu schreiben.


Oder kann die Datentabelle ein wenig kompakten, wenn auch nicht ganz so elegant (von einer reinen Programmier Sicht wegen der harten codierten Konstanten) auf diese Weise hergestellt werden:

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]; 
} 

In jedem Fall erhalten Sie die Idee, eine Nachschlagetabelle für die Entität und dann einen tabellengesteuerten Ansatz für die verschiedenen Werte für jede Entität zu verwenden.

3

Sie können eine switch-Anweisung verwenden. 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 
} 

Dies ist immer noch ausführlich, aber leichter zu lesen.

+0

Danke. Muss ich primaryKey in der ersten Zeile deklarieren? Ich dachte, ich hätte irgendwo gelesen, dass Javascript-Variablen in einem Block auch nach dem Block gesehen werden könnten. –

+0

Sie können primaryKey in jeder case-Anweisung deklarieren. Wenn Sie das tun, stellen Sie sicher, dass Sie die Variable mit var (z. B. var primaryKey = ...) in jeder case-Anweisung deklarieren, da Sie nicht wissen, welche Anweisung die Variable instanziieren wird. Wenn Sie es außerhalb der switch-Anweisung deklarieren, müssen Sie die Variable nur an einer Stelle deklarieren. –

Verwandte Themen