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

如何将循环生成的多个JavaScript对象合并为一个对象数组?

问题分析与修复方案

看起来你遇到的核心问题是数组初始化和元素收集的时机错误,导致每次循环都重置数组,还错误地尝试遍历单个对象而非数组。咱们一步步来修正:

你的代码里的关键问题:

  • var res = []; 放在第一个for循环内部,意味着每次遍历视频条目时都会创建新的空数组,之前收集的元素全丢失了。
  • 第二个for循环完全没必要,而且j < results是错误逻辑——results是单个对象,不是数组,没法用数字去比较长度。
  • sendSocketNotification放在循环内部,会导致每次遍历都发送一次只包含当前条目的数组,而非所有条目的完整集合。

修正后的代码:

parser(body, (err, result)=> { 
  if(result.hasOwnProperty('feed')){ 
    var entries = JSON.parse(JSON.stringify(result.feed.entry)); 
    // 把结果数组初始化移到循环外面,确保只创建一次
    var res = []; 
    for(var i = 0; i < entries.length; i++){ 
      var tube = entries[i]; 
      var tLink = tube.link[0].$.href; 
      var title = tube.title; 
      var id = tube['yt:videoId'][0]; 
      var pic = tube['media:group'][0]['media:thumbnail'][0].$.url; 
      var videoItem = { url : tLink, title : title[0], thumb: pic, id: id }; 
      // 直接把单个对象push到结果数组里
      res.push(videoItem); 
    }
    // 等所有条目都处理完,再统一发送完整数组
    this.sendSocketNotification("TUBE_RESULT", res); 
  }
});

主要修改点说明:

  1. 数组初始化移到循环外:res = []只执行一次,后续所有视频条目都往同一个数组里添加。
  2. 移除无效的第二个循环:不需要遍历单个对象,直接把videoItem(我重命名了变量,让语义更清晰)push到数组即可。
  3. 延迟发送通知:把sendSocketNotification移到第一个for循环外面,确保所有条目处理完成后,再发送包含所有对象的完整数组。

这样修改后,res数组就会包含所有解析出来的视频对象,最后一次性发送出去,就能得到你想要的对象数组啦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 07:27:07