在对象析构函数中使用默认值,同时保留任何非默认值

Using default values in object destructuring while retaining any un-defaulted values

本文关键字:默认值 保留 任何非 对象 析构函数      更新时间:2023-09-26

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

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"的键。所以我想用。。。休息之后。。。传播

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

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

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

目前没有。您可以将默认值存储在一个单独的对象中,并使用Object.assign:

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