我想创建一个有条件添加成员的对象.简单的方法是:
var a = {};
if (someCondition)
a.b = 5;
Run Code Online (Sandbox Code Playgroud)
现在,我想写一个更惯用的代码.我在尝试:
a = {
b: (someCondition? 5 : undefined)
};
Run Code Online (Sandbox Code Playgroud)
但现在,b是a其价值的成员undefined.这不是理想的结果.
有方便的解决方案吗?
更新
我寻求一个可以处理几个成员的一般情况的解决方案.
a = {
b: (conditionB? 5 : undefined),
c: (conditionC? 5 : undefined),
d: (conditionD? 5 : undefined),
e: (conditionE? 5 : undefined),
f: (conditionF? 5 : undefined),
g: (conditionG? 5 : undefined),
};
Run Code Online (Sandbox Code Playgroud) 我该如何定义条件数组元素?我想做这样的事情:
const cond = true;
const myArr = ["foo", cond && "bar"];
Run Code Online (Sandbox Code Playgroud)
这按预期工作: ["foo", "bar"]
但是,如果我设置cond到false,我得到以下结果:["foo", false]
我怎么能用条件元素定义数组?
是否有一些基于条件设置属性的语法?
data: {
userId: 7,
actionId: 36,
express: (myCondition ? true : null) // does not work
}
Run Code Online (Sandbox Code Playgroud)
我想要express设置为一个值或根本不设置(即,应该没有命名的键express),并且在定义之后没有额外的语句.我知道我可以使用它作为布尔值,但接收方正在使用isset()支票,我想知道我是否可以避免修改它.
编辑:似乎没有直接解决问题的方法如上所述.以下是密切的建议:
JSON.stringify(Chris Kessel,dystroy):
var json = JSON.stringify( {
data: {
userId: 7,
actionId: 36,
express: (myCondition ? true : null)
}
});
Run Code Online (Sandbox Code Playgroud)
一个匿名函数(Paulpro):
var data = new function(){
this.userId = 7;
this.actionId = 36;
myCondition && (this.express = true);
};
Run Code Online (Sandbox Code Playgroud)
额外声明(x4rf41):
data: {
userId: 7,
actionId: 36
}
if(myCondition) data["express"] = …Run Code Online (Sandbox Code Playgroud) 我正在尝试执行以下操作以满足代码生成器的要求(Sencha Cmd是特定的).
这就是我需要做的事情.关键因素是函数体必须以对象文字的返回结束.由于构建器的限制,我无法返回变量.因此,如果参数'includeB'为true,如何在伪代码点处添加属性'b',但如果为false,则不添加属性AT ALL.即b == undefined或b == null是不允许的.
也许这是不可能的.
function create(includeB) {
// Can have code here but the final thing MUST be a return of the literal.
// ...
return {
a : 1
// pseudo code:
// if (includeB==true) then create a property called b
// and assign a value of 2 to it.
// Must be done right here within this object literal
}
}
var obj = create(false);
// obj must have property 'a' ONLY
var …Run Code Online (Sandbox Code Playgroud) 我想根据标志值在对象中设置一些键
例如
const ourFlag = true //true or false depends on case
const ourObject = {
name: 'Pablo',
secondName: 'Picasso',
[ourFlag && 'age']: 20,
[ourFlag && 'moreComplexValue']: [
{
val: true
},
{
val: false
}
]
}
Run Code Online (Sandbox Code Playgroud)
只要ourFlag设置为true一切都按我的预期工作,但是当我改变它的价值时,false一些奇怪的事情开始出现。
财产age不再存在 - 很好,但财产moreComplexValue现在存在false
当标志为:时我得到的代码false:
{
name: 'Pablo',
secondName: 'Picasso',
// age disappear as I expected
false: [ //why!?!
{
val: true
},
{
val: false
}
]
} …Run Code Online (Sandbox Code Playgroud)