Javascript 有条件地设置对象属性

Javascript 有条件地设置对象属性,javascript,Javascript,是否有一些基于条件设置属性的语法 data: { userId: 7, actionId: 36, express: (myCondition ? true : null) // does not work } 我希望express设置为一个值或根本不设置(即,不应该有名为express的键),并且在定义之后没有额外的语句。我知道我可以将其用作布尔值,但接收方正在使用isset()检查,我想知道是否可以避免修改它 编辑:似乎无法直接解决上述问题。以下是一些建议: JS

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

data: {
    userId: 7,
    actionId: 36,
    express: (myCondition ? true : null) // does not work
}
我希望
express
设置为一个值或根本不设置(即,不应该有名为
express
的键),并且在定义之后没有额外的语句。我知道我可以将其用作布尔值,但接收方正在使用
isset()
检查,我想知道是否可以避免修改它


编辑:似乎无法直接解决上述问题。以下是一些建议:

JSON.stringify(Chris Kessel,dystroy):

匿名函数(Paulpro):

额外声明(x4rf41):

Eval(我以前的同事):

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


首先,这是javascript,不是JSON

解决方案:

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

你可以这样做:

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

data: {
    userId: 7,
    actionId: 36,
    express: (myCondition ? true : undefined)
}
将对象转换为JSON时,不会写入值为
undefined
的属性



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

如果使用匿名函数而不是对象文字符号定义对象,则可以这样做:

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

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

有点旧,但也有一个很好的解决方案,您可以这样做:

data: {
    userId: 7,
    actionId: 36
}

Object.assign(data, !myCondition && { express: yourValue });
因此,如果您的条件为false,它将为您的express属性指定所需的值。

使用

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

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

这并不是一个真正的答案:“定义之后没有额外的状态”。显然,OP知道他可以做到。这在ES6中不起作用。向我显示更漂亮和林丁错误当你说“根本没有设置”时,你是说属性存在但值
未定义
,还是说属性不存在?我是说属性根本不应该存在。@mcmlxxvi我想你指的是对象属性,而不是JSON属性。你的问题中没有JSON。@Paulpro:我想你是对的:)重复我只是将它提供给一个AJAX调用,它没有被剥离-我没有显式地将它字符串化。我不知道你的API,但它几乎可以肯定它调用的是JSON.stringify。即使没有,规范也不允许传递未定义的值,因此任何API都必须删除值为
undefined
的属性。我使用的是jQuery,不知道它对对象做了什么,但该属性仍然存在。对于JSON,为+1。stringify忽略未定义的属性。学到了一些新的东西,谢谢如果你不生成JSON,那就与JSON没有任何关系。
null
不是剥离的,
undefined
是。是的,非常正确。我只是在我的代码中重复了原始代码中的内容。这是一个很好的答案。
var json = JSON.stringify( {
    data: {
        userId: 7,
        actionId: 36,
        express: (myCondition ? true : null)
    }
});
data: {
    userId: 7,
    actionId: 36,
    express: (myCondition ? true : undefined)
}
var data = new function(){
    this.userId = 7;
    this.actionId = 36;
    myCondition && (this.express = true);
};
data: {
    userId: 7,
    actionId: 36
}

Object.assign(data, !myCondition && { express: yourValue });
data: {
    userId: 7,
    actionId: 36,
    ...myCondition && {express: true}
}
data: {
    userId: 7,
    actionId: 36,
    ...(myCondition ? {express: true} : {})
}