我对这个失去了理智。我的上一个问题回答了语法问题,但没有解决它使其正常运行的问题,所以这里有......
我的对象:
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。
我希望我能解释这一点。如果需要澄清,请告诉我。
答案 0 :(得分:1)
var idx = filter[key].indexOf(value);
if(idx != -1)
{
filter[key].splice(idx, 1);
}
else
{
filter[key].push(val);
}
答案 1 :(得分: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);
}
答案 2 :(得分:0)
in
运算符测试对象是否具有给定属性,但不检查成员资格。