当前位置: 首页 > 知识库问答 >
问题:

有条件地设置对象特性

萧树
2023-03-14

是否有一些基于条件设置属性的语法?

data: {
    userId: 7,
    actionId: 36,
    express: (myCondition ? true : null) // does not work
}

我希望将express设置为一个值或根本不设置(即,不应该有名为express的键),并且在定义后没有额外的语句。我知道我可以将其用作布尔值,但接收端正在使用一个检查,我想知道是否可以避免修改它。

编辑:似乎没有直接解决上述问题的方法。以下是建议:

JSON。stringify(Chris Kessel,dystroy):

var json = JSON.stringify( {
    data: {
        userId: 7,
        actionId: 36,
        express: (myCondition ? true : null)
    }
});

匿名函数(Paulpro):

var data = new function(){
    this.userId = 7;
    this.actionId = 36;
    myCondition && (this.express = true);
};

一个额外的语句(x4rf41):

data: {
    userId: 7,
    actionId: 36
}
if(myCondition) data["express"] = true;

Eval(我的前同事):

eval("data = {userId: 7, actionId: 36 " + (myCondition ? ", express: true}" : "}"))

条件定义(不知道如何标记这个):

data = (
    (myCondition && { userId: 7, actionId: 36, express: true }) ||
    (!myCondition && { userId: 7, actionId: 36 })
);

共有3个答案

弘伟彦
2023-03-14

如果使用匿名函数而不是对象文字符号定义对象,则可以执行此操作:

var data = new function(){
    this.userId = 7;
    this.actionId = 36;
    myCondition && (this.express = true);
};

生成的data对象完全相同,只是它的构造函数将是匿名函数而不是窗口。对象

单于煌
2023-03-14

这样做:

data: {
    userId: 7,
    actionId: 36,
    express: (myCondition ? true : undefined)
}

将对象字符串化为JSON时,不会写入值为未定义的属性。

编辑:从评论中可以看出,实际上没有涉及JSON。OP使用的是<代码>$。ajax。可能使用param<代码>$。不幸的是,param确实为值为未定义的属性创建了一个条目。因此,如果没有任何补充代码,可能就没有解决方案

贾沛
2023-03-14

使用扩展运算符。

data: {
    userId: 7,
    actionId: 36,
    ...myCondition && {express: true}
}

请注意,如果您使用Flow,该语法可能会生成类型检查错误。您可以更明确、更简洁地编写上述内容,如下所示:

data: {
    userId: 7,
    actionId: 36,
    ...(myCondition ? {express: true} : {})
}
 类似资料:
  • 这是我的代码: 只有当tipus==“hianyos”时,我如何才能将rang属性添加到对象?

  • 我正试图找到一个既有形式又有功能的解决方案。下面是两个问题的例子,一个是功能失调,但具有我想要达到的形式水平,另一个是功能失调,但繁琐。 上面的例子是我正在做的一个非常简短的版本,只包括3个属性。在实践中,我有更多,所以如果(this=that)}的数量越来越多。。。不是失控,而是丑陋。我希望它看起来不那么毛茸茸的。 无论如何,有没有什么js技巧可以有条件地不设置对象的属性? 我对使用助手函数持开

  • 我试图为父对象创建一个NamedQuery,它从数据库中检索所有可用的父对象,并有条件地在同一个查询中获取一些子对象。例如,查询应该检索所有父对象,并获取每个父对象的年=2012的子对象。不应该获取其余的子对象。我试图用左连接FETCH来玩,但结果是一些父对象也被排除在外。但话说回来,我是FETCH语句的新手。 有没有办法完成上述任务?非常感谢您的帮助。我的父对象的相关代码如下所示:

  • 我想有条件地向对象添加一个属性。目前我有这个: 问题是如果汽车。电池不存在我有电池:未定义。如果对象中不存在该属性,我宁愿不要该属性。我怎样才能做到这一点?

  • 我正在尝试执行以下操作以满足代码构建器的要求(具体来说是Sencha Cmd)。 这是我需要做的本质。关键因素是函数体必须以返回对象文字结束。由于生成器中的限制,我无法返回变量。那么,如果参数includeB为true,如何在下面的伪代码点添加属性“b”,但如果为false,则根本不添加属性。不允许ie b==未定义或b==null。 也许这是不可能的。 感谢阅读和考虑, 默里

  • 我试图做的事情在节点js中可能是不可能的,但在我放弃之前,我想得到其他意见。 我有一个线程正在执行产品的设置。为了便于论证,让我们将其称为“主”线程。我希望在产品设置过程中可能发生的所有错误都被“主”线程捕获。如果安装成功,那么在我知道安装成功之前,我不希望“主”线程完成。 产品设置过程中的一个步骤涉及在客户的AWS帐户中创建CloudFormation堆栈。实现这一点的AWS函数是createS