如果里面 return

If inside return

是否可以将 if 条件添加到 return 中,以便根据布尔值 flag

它是在函数内部返回的,如

return { val1: 'aaa', val2: 'bbb'}

return { val1: 'aaa', val2: 'bbb', val3:'ccc'}.

当然可以

if (flag) {
    return { val1: 'aaa', val2: 'bbb'}
} else {
    return { val1: 'aaa', val2: 'bbb', val3:'ccc'}.
}

但是我不喜欢它,因为它有太多的属性(不仅仅是示例中的 val1val2,还有更多)所以有一个巨大的块将在这种情况下被复制。

有什么想法吗? 谢谢。

这是一个常见的问题。

干净的解决方案是声明您的对象:

var vals = { val1: 'aaa', val2: 'bbb'};
if (flag) vals.val3 = 'ccc';
return vals;

它也是模仿底层逻辑的东西。

尝试:

var obj = { val1: 'aaa', val2: 'bbb'};

if (!flag) {
  obj.val3 = 'ccc';
  //any other changes to the object you might want to add  
}

return obj;

如果您有很多属性,您可以尝试 extend 您的基本对象和包含额外属性的对象,例如使用 jQuery.extend()

使用下划线你可以这样做:

return _.extend({ val1: 'aaa', val2: 'bbb' }, flag ? {} : { val3: 'ccc' });