为何disable()函数在预期返回true时却返回false?
修复你的
disable()函数逻辑问题 看起来你的disable()函数想要实现的是:当没有选中任何复选框,或者选中的复选框里存在值为null的项时返回true,不过当前代码里的forEach循环存在一个关键问题——循环内部的return true只会跳出当前的回调函数,并不会让整个disable()函数返回结果,导致即使找到null值,最终还是会返回false。
这里给你修正后的代码:
disable() { // 条件1:0个复选框被选中,直接返回true if (!this.checked_y.length) { return true; } // 遍历选中的项,检查是否存在值为null的spec for (const year of this.checked_y) { for (const sp of year.specs) { if (sp.spec === null) { return true; } } } // 两个条件都不满足,返回false return false; }
或者你也可以用数组的some()方法来简化代码,它会在找到第一个满足条件的元素时立即返回true,逻辑更清晰:
disable() { return !this.checked_y.length || this.checked_y.some(year => year.specs.some(sp => sp.spec === null) ); }
为什么原代码不生效?
forEach()方法的回调函数里的return语句不会影响外层函数的执行流程——它只是终止当前这一次的回调,循环会继续执行剩下的元素。所以即使找到了null值,函数还是会继续遍历,最后走到return false,这和你的预期不符。
而for...of循环或者some()方法可以在满足条件时立即终止并让外层函数返回结果,完美匹配你的需求。
内容的提问来源于stack exchange,提问作者Aimen Kaa
相关产品推荐
相关产品推荐

