误用push方法解决绵羊计数问题失效原因咨询
绵羊计数问题的错误分析与修正
错误原因拆解
- 方法混淆:你把
push()和pop()搞混了。push()是往数组末尾添加元素,返回添加后的数组长度;而你需要的移除并返回最后一个元素的方法是pop()。但就算换成pop(),你的循环逻辑也有问题——for循环的i在递增,数组长度在递减,会导致一半元素遍历不到。 - 无参数调用
push()的结果:当你调用a.push()却不传任何参数时,数组不会有任何变化,返回值是当前数组的长度(数字类型)。所以变量b始终是数字,和true比较永远不成立,answer自然一直是0。 - 循环逻辑错误:你以为每次循环数组长度会减1,但
push()(无参数)根本不会改变数组长度,循环会执行原数组的24次,但每次条件都不满足,最终返回0。
正确解法示例
方法1:用filter快速统计
function countSheeps(arrayOfSheep) { // 过滤出所有true元素,再取长度 return arrayOfSheep.filter(sheep => sheep === true).length; }
方法2:普通循环遍历计数
function countSheeps(arrayOfSheep) { let answer = 0; for(let i = 0; i < arrayOfSheep.length; i++){ // 直接判断当前元素是否为true if(arrayOfSheep[i] === true){ answer += 1; } } return answer; }
方法3:用forEach遍历
function countSheeps(arrayOfSheep) { let count = 0; arrayOfSheep.forEach(sheep => { if (sheep) count++; }); return count; }
内容的提问来源于stack exchange,提问作者Leonardo Facco
相关产品推荐
相关产品推荐

