解构可选函数参数

Destructing optional function parameters

绞尽脑汁试图获得最佳效果。假设我有一个将对象作为参数并像这样销毁它的函数:

myfunc = (options = {a:true, b:true, c:true}) => {...}

默认情况下 a b 和 c 为真。但是假设我调用 myfunc 并希望 b 为假:

myfunc({b:false})

现在好了 options.b === false,但是 a 和 c 的值不见了。 有没有办法在不传递默认值副本的情况下完成此操作?

我尝试了一些奇怪的东西,比如

myfunc = (options = Object.assign({a:true, b:true, c:true}, options)) =>{}

但这肯定是不对的。

您可以在不使用 option 的情况下使用具有默认值的所需属性的解构的默认对象。然后使用简写属性创建一个新的。

对于其他对象,您可以使用较新的或 babeljs 对象的 rest 属性。

var myfunc = ({ a = true, b = true, c = true, ...rest } = {}) => {
        const option = { a, b, c, ...rest };
        console.log(option);
    };

myfunc();             // take {} as default and the default values inside of the object
myfunc({ b: false }); // take b and default values
myfunc({ foo: 42 });  // take foo and all default values
.as-console-wrapper { max-height: 100% !important; top: 0; }

您可以在解构语句中传递默认值:

myFunc = ({a=true, b=true, c=true})

缺点显然是无法将选项作为一个整体来参考。 因此,也许将 options 作为参数并在函数体中进行解构是更好的选择:

myfunc = (options={}) => {
    const {a=true, b=true, c=true} = options;
    ....
}