首页 > 解决方案 > 破坏可选函数参数

问题描述

挠头试图达到最佳状态。假设我有一个函数,它将一个对象作为参数并像这样破坏它:

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

默认情况下 ab 和 c 为真。但是假设我打电话myfunc并希望 b 为假:

myfunc({b:false})

现在好了options.b === false,但是 a 和 c 的值已经消失了。有没有我可以做到这一点而不必传递默认值的副本?

我尝试了一些奇怪的东西

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

但这肯定是不对的。

标签: javascriptecmascript-6destructuring

解决方案


您可以使用具有默认值的所需属性解构的默认对象,而无需使用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; }


推荐阅读