在JavaScript中构建和维护选项数组/对象

时间:2012-05-28 23:24:53

标签: javascript

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

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

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

filter('country', 3);

会更新'country'键,将'3'作为新值。

filter('Age Group', 4);

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

filter('Gender', 1);

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

赞赏正确方向的任何一点。

2 个答案:

答案 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]undefinedval不匹配,因此它将添加键/值

如果key存在,但val不匹配,则会设置键/值

如果key存在并且val匹配,则会删除密钥。

注意:使用===确保比较中没有自动类型转换非常重要。


或者,如果您想要一个可以自动使用options变量的函数,那么您可以使用它:

​function filter(key, val)​ {
    if (options[key] === val) {
        delete options[key];    
    } else {
        options[key] = val;
    }
}

就我个人而言,如果您根据密钥先前是否存在或是否匹配而使用显式setKey和removeKey函数而不是此变量操作,我认为代码更具可读性。