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' 添加到数组中,而不是删除'2' 已经存在,因为它与索引比较,即 0。

我希望我解释得对。如果需要澄清,请告诉我。

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 (非 jQuery 版本,感谢 xvatar

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 回答