0

私はこれに頭を悩ませています。私の最後の質問は構文の問題に答えましたが、それを正しく機能させることについては触れていなかったので、ここに行きます...

私の目的:

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

私の機能:

function buildFacets(key, val)
{
    if(key == 'country')
    {   
        filter.country = val;
    }
    else
    {
        if(val in filter[key])
        {
            delete filter[key][val];
        }
        else
        {
            filter[key].push(val);
        }
    }

    console.log(filter);
}

私の問題は、私の関数が入力値を配列値ではなく配列インデックスと比較していることです。たとえば、buildFacets( "Age Group"、2)を呼び出すと、その配列の2の値が取得されます。ただし、もう一度呼び出すと、削除するのではなく、配列に「2」の別の値が追加されます。インデックス(0)と比較しているため、すでに存在する「2」。

私はこの権利を説明していると思います。説明が必要な場合はお知らせください。

4

3 に答える 3

1
var idx = filter[key].indexOf(value);

if(idx != -1)
{
    filter[key].splice(idx, 1);
}
else
{
    filter[key].push(val);
}
于 2012-06-19T19:28:33.423 に答える
0

jQueryが助けになりますが、jQuery以外のソリューションが何であるかを知りたいです。

function buildFacets(key, val)
{
    var pos = -1;

    if(key == 'country')
    {   
        filter.country = val;
    }
    else
    {
        pos = $.inArray(val, filter[key]);

        if(pos > -1)
        {
            filter[key].splice(pos,1);
        }
        else
        {
            filter[key].push(val);
        }
    }

    console.log(filter);
}

* EDIT / UPDAT * E(xvatarのおかげでjQuery以外のバージョン

function buildFacets(key, val)
{
    var pos = -1;

    if(key == 'country')
    {   
        filter.country = val;
    }
    else
    {
        pos = filter[key].indexOf(val);

        if(pos > -1)
        {
            filter[key].splice(pos,1);
        }
        else
        {
            filter[key].push(val);
        }
    }

    console.log(filter);
}
于 2012-06-19T19:27:18.203 に答える
0

inオペレーターは、オブジェクトに特定のプロパティがあるかどうかをテストし、メンバーシップをチェックしません。

于 2012-06-19T19:28:17.920 に答える