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

JavaScript如何将activatedItems、quarterItems属性合并到modules数组对象

解决方案

你原有方案的问题在于按下标索引合并仅适用于三个数组元素顺序严格一一对应的场景,但quarterItems是公共维度数据,和modules/activatedItems长度、顺序都不匹配,必须按关联字段做映射匹配才能得到正确结果。

实现思路

  • 先将activatedItems转为以activatedId为键的映射表,快速匹配module对应的激活配置
  • 再将quarterItems转为以id为键的映射表,快速匹配激活配置对应的季度信息
  • 遍历modules数组时按关联字段查表合并属性,完全规避下标匹配的错位问题

完整代码

// 提取原始数据
const { isExternalVisitor, isAdmin, modules, activatedItems, quarterItems } = response.result;

// 生成activated映射表:key为activatedId,value为对应激活项
const activatedMap = new Map(activatedItems.map(item => [item.activatedId, item]));
// 生成quarter映射表:key为季度id,value为对应季度项
const quarterMap = new Map(quarterItems.map(item => [item.id, item]));

// 组装最终结果
const result = {
  isExternalVisitor,
  isAdmin,
  modules: modules.map(module => {
    const matchedActivated = activatedMap.get(module.activatedId) || {};
    const matchedQuarter = quarterMap.get(matchedActivated.stQuarterId) || {};
    // 合并属性,优先级:module < activatedItem < quarterItem,重名属性后者覆盖前者
    return { ...module, ...matchedActivated, ...matchedQuarter };
  })
};

补充说明

  • 用Map做映射的整体时间复杂度为O(n+m),远优于每次遍历数组查找的O(n*(m+k)),数据量越大效率优势越明显
  • 代码中添加了|| {}降级逻辑,可避免关联字段不存在时报错
  • 属性合并顺序和你预期输出的属性优先级完全一致

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 01:51:00