如何在JavaScript中按指定条件校验对象数组并返回布尔值
解决对象数组的布尔值判断问题
先梳理下你给定的四条判断规则,确保我们对齐需求:
- 规则1:数组里没有
name为"All"的对象 → 返回true - 规则2:数组里只有一个"All"对象,但同时还有其他对象 → 返回
false - 规则3:数组里只有一个"All"对象,且没有其他任何对象 → 返回
true - 规则4:数组里有多个"All"对象 → 返回
false
你的初始函数没有覆盖这些规则的全部场景,比如没有"All"的情况直接返回了false(不符合规则1),有一个"All"但还有其他对象时返回true(不符合规则2)。下面是修正后的实现:
function checkObj(ob) { // 统计name为"All"的对象数量 const allCount = ob.filter(e => e.name === "All").length; // 按规则分支判断 if (allCount === 0) { // 规则1:无All → true return true; } else if (allCount > 1) { // 规则4:多个All → false return false; } else { // 只有一个All的情况,看数组总长度 return ob.length === 1; // 总长度为1 → 规则3返回true;总长度>1 → 规则2返回false } }
测试用例验证
我们用你提供的测试数据来验证结果:
var obj1=[ {id:1, name: "All", value:"all"}, {id:2, name: "Sun", value:"sun"}, {id:3, name: "Mon", value:"mon"}, ] var obj2=[ {id:4, name: "Thur", value:"thur"}, {id:8, name: "Mon", value:"mon"}, ] var obj3=[ {id:1, name: "Thur", value:"thur"}, {id:5, name: "All", value:"all"}, {id:2, name: "Mon", value:"mon"}, {id:6, name: "All", value:"all"} ] var obj4=[ {id:1, name: "All", value:"all"} ] var r1 = checkObj(obj1); // 预期false → 实际false var r2 = checkObj(obj2); // 预期true → 实际true var r3 = checkObj(obj3); // 预期false → 实际false var r4 = checkObj(obj4); // 预期true → 实际true console.log(r1, r2, r3, r4); // 输出:false true false true
这个实现把每个规则都对应到了具体的分支逻辑,逻辑清晰且覆盖了所有边界情况。
内容的提问来源于stack exchange,提问作者codecat
相关产品推荐
相关产品推荐

