有条件地设置对象属性

新手上路,请多包涵

是否有一些语法可以根据条件设置属性?

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

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


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

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 })
);

原文由 mcmlxxxvi 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 292
2 个回答

像这样做 :

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

当您将对象 字符串 化为 JSON 时,不会写入值为 undefined 的属性。


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

原文由 Denys Séguret 发布,翻译遵循 CC BY-SA 3.0 许可协议

使用 扩展运算符

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

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

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

原文由 ericsoco 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏