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

JS如何按id分组对象数组关联URL并保留对应type属性

问题修正方案

你现有代码存在两处核心错误:

  1. 遍历ids数组时,数组元素是带id/type的对象,你直接将整个对象作为output的属性键,没有提取对象内的id值作为顶层键
  2. 初始化分组节点时,没有存入对应type字段,反而新增了非需求要求的length属性

另外你给出的预期输出存在格式错误:多个平级对象用逗号分隔不符合JS对象语法,实际正确输出应为以id为顶层键的单个对象,同id对应的type默认取首次出现时的属性值即可。

修正后可直接运行的代码

const output = {};
sites.forEach(site => {
  const ids = site.ids;
  if (Array.isArray(ids) && ids.length) {
    ids.forEach(idItem => {
      const key = idItem.id;
      if (!output[key]) {
        output[key] = {
          type: idItem.type,
          urls: []
        };
      }
      output[key].urls.push(site.url);
    });
  }
});

逻辑说明

  • 遍历内层ids数组时,先从每个元素中提取id字段值,用该值作为结果对象的顶层键,直接解决id无法作为键的问题
  • 首次匹配到新id时,同步将当前元素的type属性存入初始化的分组结构,不需要额外维护length字段,需要统计url数量时直接读取output[key].urls.length即可
  • 同一id重复出现时,仅将当前url推入对应分组的urls数组,默认同id的type属性全局一致;如果业务中存在同id对应不同type的场景,可以在初始化后加类型校验或覆盖逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 11:45:35