在JavaScript中使用数组而不是对象

在JavaScript中使用数组而不是对象,javascript,arrays,json,Javascript,Arrays,Json,我有以下风险值: filter = { "country": 1, "Age Group": {}, "Gender": {}, "NEWSEC": {}, "Telco_Segment": {} }; 和功能: function facetBuilder(key, val) { if(key == 'country') {

我有以下风险值:

    filter =  {
            "country": 1,
            "Age Group": {},
            "Gender": {},
            "NEWSEC": {},
            "Telco_Segment": {}
    };
和功能:

function facetBuilder(key, val)
{
    if(key == 'country')
    {   
        filter.country = val;
    }
    else
    {
        if(typeof filter[key][val] !== "undefined" )
        {
            delete filter[key][val]; //I'm assuming you want to remove it
        }
        else
        {
            filter[key][val] = true;
        }
    }

    console.log(filter);
}
最终生成的对象的外观如下所示:

    filter =  {
            "country": 1,
            "Age Group": {
                4: true,
                3: true,
                2: true
            },
            "Gender": {
                1: true
            },
            "NEWSEC": {
                3: true,
                2: true
            },
            "Telco_Segment": {}
    };
    filter =  {
            "country": 1,
            "Age Group": [4,3,2],
            "Gender": [1],
            "NEWSEC": [3,2],
            "Telco_Segment": []
    };
但我真正想要的是这样的东西:

    filter =  {
            "country": 1,
            "Age Group": {
                4: true,
                3: true,
                2: true
            },
            "Gender": {
                1: true
            },
            "NEWSEC": {
                3: true,
                2: true
            },
            "Telco_Segment": {}
    };
    filter =  {
            "country": 1,
            "Age Group": [4,3,2],
            "Gender": [1],
            "NEWSEC": [3,2],
            "Telco_Segment": []
    };
我不知道该怎么做。

而不是

filter[key][val] = true;
怎么样

filter[key].push(val);

而不是

filter[key][val] = true;
怎么样

filter[key].push(val);


您现在所拥有的,
if(typeof filter[key][val]!==“undefined”)
很好,因为对象具有恒定的时间查找。如果使用数组扫描,
If(filter[key].indexOf(val)!=-1)
,时间复杂度将增加到O(n),因为您必须扫描每个元素以查看它是否在数组中。

您现在拥有的,
If(typeof filter[key][val]!=“undefined”)
,是好的,因为对象具有恒定的时间查找。如果使用数组扫描,
If(filter[key].indexOf(val)!=-1)
,时间复杂度会增加到O(n),因为您必须扫描每个元素以查看它是否在数组中。

就是这么简单。。。非常感谢。您还必须更改
删除过滤器[key][val]
变量a=过滤器[键];删除a[a.indexOf(val)]
@MindVirus:使用
delete
删除数组元素不是一个好主意。使用
.splice
更好。我最初从数组中删除值的方法和MindVirus提供的方法都不能正常工作。就是这么简单。。。非常感谢。您还必须更改
删除过滤器[key][val]
变量a=过滤器[键];删除a[a.indexOf(val)]
@MindVirus:使用
delete
删除数组元素不是一个好主意。使用
.splice
更好。我最初从数组中删除值的方法和MindVirus提供的方法都不能正常工作。