2012-04-11 3 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

ответ

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 внутри блока также можно увидеть после блока? –

+0

Вы можете объявить primaryKey внутри каждого оператора case. Если вы это сделаете, просто убедитесь, что вы указали переменную с var (например, var primaryKey = ...) внутри каждого оператора case, потому что вы не знаете, какой оператор будет создавать экземпляр переменной. Объявив это за пределами оператора switch, вам нужно объявить переменную только в одном месте. –

Смежные вопросы