如何修复for循环统计对象内多数组中'cat'总数的代码错误?
问题分析与解决
你的代码核心问题是遍历对象时搞错了操作对象:
在for (const tutor in tutorPetTypes)循环里,tutor是对象的键(也就是导师的名字字符串,比如'Sarah'),但你内层循环却在遍历这个名字的字符长度,自然永远匹配不到"cat",导致totalCats始终为0。
修正后的代码
const tutorPetTypes = { 'Sarah': ['cat'], 'Jim': ['dog', 'dog'], 'Joe': ['mouse'], 'Róisín': ['cat','cat','cat','cat','cat','dog'], 'Edd': ['lizard', 'cat'], 'Lewis': ['bearded dragon', 'tortoise'] } let totalCats = 0 for (const tutor in tutorPetTypes) { // 先获取当前导师对应的宠物数组 const petList = tutorPetTypes[tutor]; // 遍历宠物数组,而不是导师名字的字符 for (let i = 0; i < petList.length; i++) { if (petList[i] === "cat") { totalCats++; } } }; console.log(totalCats); // 输出7
关键修正点
- 新增
const petList = tutorPetTypes[tutor]:通过对象的键(导师名字)拿到对应的宠物数组,这才是你需要遍历的目标 - 内层循环的长度判断改为
petList.length:遍历宠物数组的元素,而非导师名字的字符 - 条件判断改为
petList[i] === "cat":检查数组中的每个宠物类型是否为猫
额外优化思路(可选)
如果不想用嵌套for循环,也可以用Object.values配合forEach简化代码,结果一致:
let totalCats = 0; Object.values(tutorPetTypes).forEach(pets => { pets.forEach(pet => { if (pet === 'cat') totalCats++; }); });
内容的提问来源于stack exchange,提问作者Zac
相关产品推荐
相关产品推荐

