1

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

2 に答える 2

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

どちらの方法でも、エンティティのルックアップ テーブルを使用してから、各エンティティのさまざまな値に対してテーブル駆動型のアプローチを使用するというアイデアが得られます。

于 2012-04-11T06:09:08.720 に答える
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
}

これはまだ冗長ですが、読みやすくなっています。

于 2012-04-11T05:58:13.450 に答える