You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用for...of循环推入对象键值时遇不可迭代错误求助

问题分析与修复

核心问题

  1. for...of 遍历对象报错:普通JavaScript对象不是可迭代对象,不能直接用for...of遍历,这就是你看到"obj不可迭代"错误的原因。
  2. 需求实现偏差:你的需求是把键和值中长度为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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 06:21:36