gpt4 book ai didi

javascript - JavaScript 中更高效的选项对象

转载 作者:行者123 更新时间:2023-11-28 21:00:54 26 4
gpt4 key购买 nike

我目前在页面加载时使用所有可能的键/值对创建一个对象,并使用 true 或 false 来确定它们的状态。不过,如果只存在真实的项目,效率会更高。

示例数据:

    filter =  {
"country": 1,
"Age Group": {
2: false,
3: true,
4: false,
5: false,
6: false,
7: false
},
"Gender": {
1: false,
2: false
},
"NEWSEC": {
1: false,
2: true,
3: false,
4: false,
5: false
},
"Telco_Segment": {
1: true,
2: true,
3: true,
4: false,
5: false,
6: false
}
};

功能:

function facetBuilder(key, val)
{
if(key == 'country')
{
filter.country = val;
}
else
{
if( filter[key][val] == true )
{
filter[key][val] = false;
}
else
{
filter[key][val] = true;
}
}
console.log(filter);
}

问题:

我用来应用这些过滤器的函数会循环遍历它们,因此如果我只存在诸如“年龄组”之类的对象(如果它包含任何值),则会更有利。事实上,如果有像下面这样的东西就太好了:

    filter =  {
"country": 1,
"Age Group": [3],
"NEWSEC": [2],
"Telco_Segment": [1,2,3]
};

调用facetBuilder本质上会根据该对象的值的存在来添加/删除该对象。

我对如何处理这个问题一无所知。

最佳答案

您不需要显式检查true。您可以通过执行以下操作来检查条目是否存在:

if(map[key]) {
...
...
}

但是,如果与该键关联的值是0,那么这是一个问题,所以最好这样做:

if(typeof map[key] !== "undefined") {
...
...
}

在这种情况下您想要使用 typeof 的原因是,由于 undefined 的可能性,与 undefined 的直接比较可能会出现问题。被其他代码覆盖:

window.undefined = "not undefined";
"not undefined" == "undefined" //returns a true value

那么你的代码将如下所示:

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

另一件事,当检查真实值时,只需说

if([expression that evaluates to a boolean value]) {
...
}

你不必这样做:

if([expression that evaluates to a boolean value] == true) {
...
}

if([expression that evaluates to a boolean value] == false) {
...
}

检查属性是否存在的另一种方法是使用 in 运算符:

var stuff = {
a: 10,
c: 20,
d: 30
};

var ay = "a"
console.log(ay in blab, "b" in blab, "c" in blab, "d" in blab);
>>true false true true

我假设这就是您想要做的。如果没有,请告诉我。

关于javascript - JavaScript 中更高效的选项对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11091476/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com