使用for...of循环推入对象键值时遇不可迭代错误求助
问题分析与修复
核心问题
- for...of 遍历对象报错:普通JavaScript对象不是可迭代对象,不能直接用
for...of遍历,这就是你看到"obj不可迭代"错误的原因。 - 需求实现偏差:你的需求是把键和值中长度为5的元素分别推入数组,但原代码只在键长度为5时推了对应的值,没推键本身;第二个循环的逻辑完全错误,就算能遍历也无法正确获取值并判断。
修复后的代码
function giveMeFive(obj){ var arr = []; // 遍历对象的所有键 for(var key in obj){ // 检查键的长度是否为5,是则推入数组 if(key.length === 5){ arr.push(key); } // 获取当前键对应的值,检查值的长度是否为5,是则推入数组 const value = obj[key]; if(value.length === 5){ arr.push(value); } } return arr; }
补充说明
- 只用一个
for...in循环就完成了键和值的双重判断,避免了不可迭代的问题。 - 如果你想确保只遍历对象自身的属性(不包含原型链上继承的属性),可以给循环加一层判断:
for(var key in obj){ if(obj.hasOwnProperty(key)){ // 原有键和值的判断逻辑 } }
内容的提问来源于stack exchange,提问作者Qwop
相关产品推荐
相关产品推荐

