我正在为我正在进行的项目构建一个分面/过滤搜索,我正在寻找一个函数(或jquery插件)来帮助我做到这一点。假设我有一个如下对象:
var options = {
"country": 2,
"Gender": 1
}
然后我有一个名为filter()的函数。我通过过滤我要切换/添加/更新的选项的键和值。我当前的功能只会给我带来麻烦,而且我在调试兔子洞的距离太远,无法发布。基本上我有这个:
filter('country', 3);
会更新'country'键,将'3'作为新值。
filter('Age Group', 4);
会将该键/值对添加到选项对象。
filter('Gender', 1);
将完全从对象中删除“Gender”键。
赞赏正确方向的任何一点。
答案 0 :(得分:3)
这个明显的实现如何:
function filter(o, key, val) {
if (o.hasOwnProperty(key) && o[key] == val) {
delete o[key];
} else {
o[key] = val;
}
}
答案 1 :(得分:1)
我建议:
function filter(o, key, val) {
if (o[key] === val) {
delete o[key];
} else {
o[key] = val;
}
}
如果key
不存在作为对象的属性,则o[key]
将undefined
与val
不匹配,因此它将添加键/值
如果key
存在,但val
不匹配,则会设置键/值
如果key
存在并且val
匹配,则会删除密钥。
注意:使用===
确保比较中没有自动类型转换非常重要。
或者,如果您想要一个可以自动使用options
变量的函数,那么您可以使用它:
function filter(key, val) {
if (options[key] === val) {
delete options[key];
} else {
options[key] = val;
}
}
就我个人而言,如果您根据密钥先前是否存在或是否匹配而使用显式setKey和removeKey函数而不是此变量操作,我认为代码更具可读性。