【问题标题】:Using default values in object destructuring while retaining any un-defaulted values在对象解构中使用默认值,同时保留任何非默认值
【发布时间】:2016-07-28 17:51:15
【问题描述】:

是否可以通过解构设置一些默认参数,同时仍保留默认未考虑的任何额外值?例如:

var ob = {speed: 5, distance: 8}

function f({speed=0, location='home'}) {
    return {speed: speed, location: location, /* other keys passed in with their values intact */}
}

f(ob) // Would like to return {speed: 5, location: 'home', distance: 8}

编辑:我的函数不知道可能作为附加项传入的键的名称。例如:该函数不知道它是接收/返回一个名为“distance”的键,还是一个名为“foo”的键。所以我正在考虑某种使用 ...rest 后跟 ...spread。

【问题讨论】:

  • return { speed, location, distance: 8 }
  • 我更多的是寻找一种我不知道将要传入的额外密钥的情况。我将进行编辑以使其更清楚。
  • 有一个对象propertyrest/spread的提案,但目前还只是一个提案。
  • 考虑到您甚至有指向该提案的链接,我想说这是对我问题的明确回答。

标签: javascript ecmascript-6 destructuring


【解决方案1】:

您不能使用当前的 es6,但您可以使用通过阶段 2 预设提供的 rest 运算符。

function f({speed= 0, location: 'home', ...others}) {
   return Object.assign({}, {speed, location}, others);
}

【讨论】:

    【解决方案2】:

    是否可以通过解构设置一些默认参数,同时仍保留默认未考虑的任何额外值?

    暂时没有,没有。您可以将默认值存储在单独的对象中并使用Object.assign

    var ob = {speed: 5, distance: 8};
    var defaults = {speed: 0, location: 'home'};
    
    function f(obj) {
        return Object.assign({}, defaults, obj);
    }
    
    f(ob);
    

    【讨论】:

      猜你喜欢
      • 2018-08-20
      • 2016-05-11
      • 1970-01-01
      • 2014-05-09
      • 1970-01-01
      • 2012-08-01
      • 2016-10-30
      • 1970-01-01
      • 2019-09-30
      相关资源
      最近更新 更多