[英]Conditionally set an object property
是否有一些基于条件设置属性的语法?
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 })
);
像这样做 :
data: {
userId: 7,
actionId: 36,
express: (myCondition ? true : undefined)
}
将对象字符串化为JSON 时,不会写入值undefined
属性。
编辑:从评论看来,实际上没有涉及 JSON。 OP 正在使用$.ajax
因此可能使用了$.param
。 不幸的是, $.param
确实为值为undefined
属性创建了一个条目。 因此,如果没有任何补充代码行,可能就没有解决方案。
如果您使用匿名函数而不是对象文字表示法定义对象,则可以这样做:
var data = new function(){
this.userId = 7;
this.actionId = 36;
myCondition && (this.express = true);
};
结果data
对象完全相同,除了它的constructor
将是匿名函数而不是window.Object
。
你可以这样做:
var json = JSON.stringify( {
data: {
userId: 7,
actionId: 36,
express: (myCondition ? true : null)
}
});
有点旧,但也有一个很好的解决方案,您可以这样做:
data: {
userId: 7,
actionId: 36
}
Object.assign(data, !myCondition && { express: yourValue });
因此,如果您的条件为假,它将为您的 express 属性分配您需要的值。
首先,那是 javascript,而不是 JSON。
解决方案:
data: {
userId: 7,
actionId: 36
}
if(myCondition) data["express"] = true;
扩展运算符现在修复了这个问题。 这是一个有两个比较的例子。
注意:我将date:
更改为const date =
以便它是有效的可运行 javascript。 这也可以用于data:
如果它应该在深层对象结构内部。
const compareValue = 13; const data = { userId: 7, actionId: 36, ...(compareValue > 10 && {propertyForGreaterThan10: 'foo'}), ...(compareValue < 10 && {propertyForLessThan10: 'bar'}), } console.log(data);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.