0

私は現在、可能なすべてのキーと値のペアを使用してページの読み込み時にオブジェクトを作成し、true または false を使用してそれらの状態を判断しています。真である項目だけが存在する方が効率的ですが。

サンプルデータ:

    filter =  {
            "country": 1,
            "Age Group": {
                2: false,
                3: true,
                4: false,
                5: false,
                6: false,
                7: false
            },
            "Gender": {
                1: false,
                2: false
            },
            "NEWSEC": {
                1: false,
                2: true,
                3: false,
                4: false,
                5: false
            },
            "Telco_Segment": {
                1: true,
                2: true,
                3: true,
                4: false,
                5: false,
                6: false
            }
    };

関数:

function facetBuilder(key, val)
{
    if(key == 'country')
    {   
        filter.country = val;
    }
    else
    {
        if( filter[key][val] == true )
        {
            filter[key][val] = false;
        }
        else
        {
            filter[key][val] = true;
        }
    }
    console.log(filter);
}

問題:

これらのフィルターを適用するために使用する関数はそれらをループするため、値が含まれている場合に「Age Group」などのオブジェクトのみが存在する場合は、より有益です。実際には、次のようなものがあると便利です。

    filter =  {
            "country": 1,
            "Age Group": [3],
            "NEWSEC": [2],
            "Telco_Segment": [1,2,3]
    };

facetBuilder を呼び出すと、基本的に、そのオブジェクトの値の存在に基づいてオブジェクトが追加/削除されます。

私はこれにアプローチする方法について空白を描いています。

4

1 に答える 1

3

を明示的に確認する必要はありませんtrue。次のようにして、エントリの存在を確認できます。

if(map[key]) {
  ...
  ...
}

ただし、そのキーに関連付けられている値が の場合、0これは問題であるため、次のようにすることをお勧めします。

if(typeof map[key] !== "undefined") {
   ...
   ...
}

この場合に使用する理由は、他のコードによって上書きされる可能性があるためtypeof、直接比較undefinedすると問題が発生する可能性があるためです。undefined

window.undefined = "not undefined";
"not undefined" == "undefined" //returns a true value

次に、コードは次のようになります。

if(typeof filter[key][val] !== "undefined" )
{
    delete filter[key][val]; //I'm assuming you want to remove it
}
else
{
    filter[key][val] = true;
}

もう1つ、真の値をチェックするときは、次のように言うだけで十分です

if([expression that evaluates to a boolean value]) {
    ...
}

あなたがする必要はありません:

if([expression that evaluates to a boolean value] == true) {
    ...
}

また

if([expression that evaluates to a boolean value] == false) {
    ...
}

プロパティの存在を確認する別の方法は、in演算子を使用することです。

var stuff = {
   a: 10,
   c: 20,
   d: 30
};

var ay = "a"
console.log(ay in blab, "b" in blab, "c" in blab, "d" in blab);
>>true false true true

これがあなたのやりたいことだと思います。そうでない場合は、お知らせください。

于 2012-06-18T21:46:56.317 に答える