JS如何按id分组对象数组关联URL并保留对应type属性
问题修正方案
你现有代码存在两处核心错误:
- 遍历
ids数组时,数组元素是带id/type的对象,你直接将整个对象作为output的属性键,没有提取对象内的id值作为顶层键 - 初始化分组节点时,没有存入对应
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
相关产品推荐
相关产品推荐

