首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >有条件地设置对象属性

有条件地设置对象属性
EN

Stack Overflow用户
提问于 2013-08-02 22:46:39
回答 7查看 65.5K关注 0票数 61

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

代码语言:javascript
复制
data: {
    userId: 7,
    actionId: 36,
    express: (myCondition ? true : null) // does not work
}

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

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

JSON.stringify (Chris Kessel,dystroy):

代码语言:javascript
复制
var json = JSON.stringify( {
    data: {
        userId: 7,
        actionId: 36,
        express: (myCondition ? true : null)
    }
});

一个匿名函数 (Paulpro):

代码语言:javascript
复制
var data = new function(){
    this.userId = 7;
    this.actionId = 36;
    myCondition && (this.express = true);
};

a extra statement (x4rf41):

代码语言:javascript
复制
data: {
    userId: 7,
    actionId: 36
}
if(myCondition) data["express"] = true;

Eval (我的一个前同事):

代码语言:javascript
复制
eval("data = {userId: 7, actionId: 36 " + (myCondition ? ", express: true}" : "}"))

Conditional definition (不知道如何标记这个):

代码语言:javascript
复制
data = (
    (myCondition && { userId: 7, actionId: 36, express: true }) ||
    (!myCondition && { userId: 7, actionId: 36 })
);
EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2013-08-02 22:52:32

如下所示:

代码语言:javascript
复制
data: {
    userId: 7,
    actionId: 36,
    express: (myCondition ? true : undefined)
}

当您将对象stringify为JSON时,值为JSON的属性不会被写入。

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

票数 67
EN

Stack Overflow用户

发布于 2017-10-21 05:36:24

使用spread operator

代码语言:javascript
复制
data: {
    userId: 7,
    actionId: 36,
    ...myCondition && {express: true}
}

请注意,如果您使用的是Flow,则该语法可能会生成类型检查错误。您可以更明确地、也可以不那么简洁地编写上面的代码,如下所示:

代码语言:javascript
复制
data: {
    userId: 7,
    actionId: 36,
    ...(myCondition ? {express: true} : {})
}
票数 74
EN

Stack Overflow用户

发布于 2013-08-02 23:16:33

如果您使用匿名函数而不是对象文字表示法来定义对象,则可以做到这一点:

代码语言:javascript
复制
var data = new function(){
    this.userId = 7;
    this.actionId = 36;
    myCondition && (this.express = true);
};

得到的data对象是完全相同的,除了它的constructor将是匿名函数,而不是window.Object

票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18019854

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档