如果在内部返回

时间:2016-06-02 11:32:48

标签: javascript function return shorthand

是否可以将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在这个示例中,但是还有更多的属性)所以有一个巨大的块将被复制在这种情况下。

有什么想法吗? 谢谢。

3 个答案:

答案 0 :(得分:4)

这是一个经常出现的问题。

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

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

它也模仿了潜在的逻辑。

答案 1 :(得分:1)

尝试:

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()

答案 2 :(得分:1)

使用下划线,您可以执行以下操作:

resources>
    <string name="app_name">A simple game</string>

    <string name="hello_world">Hello world!</string>
    <string name="action_settings">Settings</string>
    <string name="title_activity_admobs">admobs</string>
    <!-- -
        This is an ad unit ID for a banner test ad. Replace with your own banner ad unit id.
        For more information, see https://support.google.com/admob/answer/3052638
    <!- -->
    <string name="banner_ad_unit_id">4526809957646802/687614978</string>
    <string name="title_activity_main">MainActivity</string>6

    <string name="interstitial_ad_sample">Interstitial Ad Sample</string>
    <string name="start_level">Level 1</string>
    <string name="next_level">Next Level</string>
    <!-- -
        This is an ad unit ID for an interstitial test ad. Replace with your own interstitial ad unit id.
        For more information, see https://support.google.com/admob/answer/3052638
    <!- -->
    <string name="interstitial_ad_unit_id">4526809957646802/6876146978</string>
    <string name="title_activity_doa">doa</string>
</resources>