【问题标题】:When creating an object, if a value is undefined don't include in the new object创建对象时,如果未定义值,则不包含在新对象中
【发布时间】:2017-04-16 22:41:05
【问题描述】:

主要是关于对象解构的 es6/7 问题。

假设我有这个示例函数:

const sample = (var1, var2) => {
  const obj = {
   one: var1
  };

  if (var2) {
    obj.two = var2;
  }

  return obj;
};

这是一种说法,“第一个参数是预期的,如果定义了第二个参数,也将它添加到对象中”。

有没有更优雅的方法来实现相同的效果,但使用对象解构?

【问题讨论】:

  • 我能想到的最接近的是:const sample = (one, two) => ({one, two}); 那仍将定义two 属性,但值将是undefined
  • 是的,我也遇到过。在很多情况下它会起作用,但有时只是属性的存在可能是一个问题。
  • 那我就写成const sample = (one, two) => two? {one, two}: {one};
  • @Thomas 我想就是这样。您为什么不将该评论添加为答案,以便我接受?谢谢!
  • 如果您希望 two 回退到某个默认值是可能的,就像这里显示的 stackoverflow.com/a/43431245/3731501 一样。否则,不,你需要if (var2 !== undefined) ...if (var2) 不起作用)。

标签: javascript ecmascript-6 destructuring


【解决方案1】:

你也可以把你的函数写成

const sample = (one, two) => two? {one, two}: {one};

这是一种说法,“第一个参数是预期的,如果定义了第二个参数,也将它添加到对象中”

与您的代码一样,请注意您作为第二个参数添加的值。 除了undefined,还有更多的虚假值,您可能希望将其中一些分配给结果。如果标准是是否定义了第二个参数,我会明确检查undefined

const sample = (one, two) => two !== undefined? {one, two}: {one};

【讨论】:

    猜你喜欢
    • 2023-04-01
    • 1970-01-01
    • 2020-11-13
    • 2018-02-17
    • 2017-12-28
    • 2021-02-13
    • 2015-08-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多