如何重构多表单isEditing状态判断的布尔值返回代码?
代码重构:判断任意表单是否处于编辑状态
原始代码
const { aForm, bForm, eForm, qForm, } = this.form; return ( aForm.isEditing || bForm.isEditing || eForm.isEditing || qForm.isEditing );
尝试的写法(无法返回布尔值)
const forms = pick(this.form, [ "aForm", "bForm", "eForm", "qForm", ]); Object.values(forms).map(f => f.isEditing).join("||") // 需要返回布尔值
可行重构方案
方案1:用Array.some()(最优解)
some()方法会遍历数组,只要有一个元素满足条件就立即返回true,完美匹配你要判断「是否有任意一个表单在编辑」的需求,还能提前终止遍历提升性能:
const forms = pick(this.form, ["aForm", "bForm", "eForm", "qForm"]); return Object.values(forms).some(form => form.isEditing);
方案2:直接通过键名数组判断
如果不想依赖pick工具函数,也可以直接定义表单键名数组,遍历判断:
const targetForms = ["aForm", "bForm", "eForm", "qForm"]; return targetForms.some(key => this.form[key].isEditing);
为什么你的写法不行?
你用join("||")会把每个isEditing的布尔值转成字符串拼接,最终得到的是类似"true||false||false"的字符串,不是布尔值,自然不符合需求。而some()是专门做存在性判断的数组方法,完全适配这个场景。
内容的提问来源于stack exchange,提问作者prajeesh
相关产品推荐
相关产品推荐

