在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提供的方法都不能正常工作。