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

JS使用for in遍历对象调用find匹配数据返回undefined如何解决

问题分析
  • for...in 遍历对象时,迭代得到的变量是对象的属性名字符串,不是属性对应的实际值。你代码中post的取值是"comment"、"comments_text"、"handle"这类字符串,字符串不存在comments_text属性,所以if (post.comments_text)分支永远不会触发,item始终为undefined。
  • 即使正确拿到comments_text的属性值,也不需要调用Object.values()处理:comments_text本身就是需要匹配的单个对象,不是对象集合,Object.values()会把它拆解为各个属性的字符串值,没有key字段可供匹配。
修正代码
const commentId = "-MlaKXBMXzXIBJMsZQNX"

const objectToLoop = {
  comment: false,
  comments_text: {
    commenter_comment: "reedwe",
    commenter_handle: "FALCON1",
    commenter_uid: "ZALb0B3wZEWjfdFIUOxteJRl9Xu1",
    key: "-MlaKXBMXzXIBJMsZQNX"
  },
  handle: "TURTLE1",
  key: "-MkeOOUboKdOcC3Sannl",
  title: "hello2"
}

function returnMatchingComment(commentIdKey) {
  let item;
  // 先判断对象是否存在comments_text属性
  if (objectToLoop.hasOwnProperty('comments_text')) {
    const commentObj = objectToLoop.comments_text;
    // 直接匹配key字段
    if (commentObj.key === commentIdKey) {
      item = commentObj;
    }
  }
  return item
}
console.log(
  returnMatchingComment(commentId)
)
运行结果
{
  commenter_comment: "reedwe",
  commenter_handle: "FALCON1",
  commenter_uid: "ZALb0B3wZEWjfdFIUOxteJRl9Xu1",
  key: "-MlaKXBMXzXIBJMsZQNX"
}

如果你的实际场景中objectToLoop是嵌套的对象集合,需要遍历外层的多个post对象,可使用下方遍历逻辑:

// 假设objectToLoop是多个post组成的对象,需要遍历每个post
function returnMatchingComment(commentIdKey) {
  let item;
  for (const postKey in objectToLoop) {
    const post = objectToLoop[postKey]; // 取post的实际值
    if (post.comments_text) {
      if (post.comments_text.key === commentIdKey) {
        item = post.comments_text;
        break;
      }
    }
  }
  return item
}

内容的提问来源于stack exchange,提问作者Alex

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 23:24:03