1

我正在为我目前正在从事的项目构建分面/过滤搜索,并且正在寻找一个函数(或 jquery 插件)来帮助我做到这一点。假设我有一个如下对象:

var options = {
    "country": 2,
    "Gender": 1
}

然后我有一个名为 filter() 的函数。我通过过滤我想要切换/添加/更新的选项的键和值。我目前的功能给我带来的只是麻烦,而且我离调试兔子洞太远了,不值得发布。基本上我有这个:

filter('country', 3);

将更新“国家”键以将“3”作为其新值。

filter('Age Group', 4);

将该键/值对添加到选项对象。

filter('Gender', 1);

将从对象中完全删除“性别”键。

4

2 回答 2

3

这个明显的实现怎么样:

​function filter(o, key, val)​ {
    if (o.hasOwnProperty(key) && o[key] == val) {
        delete o[key];    
    } else {
        o[key] = val;
    }
}

?

于 2012-05-28T23:32:35.077 回答
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 函数而不是此变量操作,则代码更具可读性。

于 2012-05-28T23:45:24.697 回答