javascript - 破坏可选函数参数
问题描述
挠头试图达到最佳状态。假设我有一个函数,它将一个对象作为参数并像这样破坏它:
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)) =>{}
但这肯定是不对的。
解决方案
您可以使用具有默认值的所需属性解构的默认对象,而无需使用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; }
推荐阅读
- c# - 如何从 WPF 功能区按钮触发 ViewModel 中的方法
- c# - 关于为什么当我部署到物理 android 内容时不会显示的任何建议?
- node.js - 在 NestJS Redis 微服务中验证输入参数
- python - 如何在熊猫数据框中制作匹配列,记录其对是否在该条目位置有数据
- python - 真实世界数据集的稀疏矩阵
- swift - Swift:线程 | 调度队列
- visual-studio - 出现错误 LNK1104 Visual Studio 2019
- php - 我们如何从 bot id 中找到 Telegram API bot 域链接?
- python - 如果 string2 是 string1 的前缀
- python - 如何从 Flask 中的另一个文件导入路由 - 请不要使用前端或查看库解决方案,仅适用于 Flask 后端的轻量级解决方案