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

如何过滤比对两个对象数组并匹配存储指定partner_code

解决方法

先通过Map预处理webusers数据,把每个client_id对应的最终partner_code计算好,再批量给objects赋值,能大幅提升大数组场景下的性能。

步骤说明:

  • 预处理webusers:遍历一次webusers,用Map记录每个client_id对应的所有partner_code集合
  • 确定最终partner_code:遍历这个Map,根据规则生成每个client_id要使用的partner_code
  • 赋值给objects:遍历objects,通过client.id直接从Map中取对应的partner_code赋值

代码示例(JavaScript):

// 1. 收集每个client_id对应的所有partner_code
const clientPartnerSetMap = new Map();
webusers.forEach(user => {
  const { client_id, partner_code } = user;
  if (!clientPartnerSetMap.has(client_id)) {
    clientPartnerSetMap.set(client_id, new Set());
  }
  clientPartnerSetMap.get(client_id).add(partner_code);
});

// 2. 根据规则生成每个client_id的最终partner_code
const finalPartnerMap = new Map();
clientPartnerSetMap.forEach((codeSet, clientId) => {
  if (codeSet.size > 1 && codeSet.has('rtm') && codeSet.has('team1')) {
    finalPartnerMap.set(clientId, 'team1');
  } else {
    // 若只有一个code直接取,多个但不满足rtm+team1的情况取第一个(可按需调整)
    finalPartnerMap.set(clientId, [...codeSet][0]);
  }
});

// 3. 给objects的partner_code字段赋值
objects.forEach(obj => {
  obj.partner_code = finalPartnerMap.get(obj.client.id) || '';
});

性能优势:

之前嵌套使用filter()/find()的方式,每次处理一个object都要遍历整个webusers数组,时间复杂度为O(O * W)(O是objects长度,W是webusers长度)。而预处理方式的时间复杂度为O(W + O),数组越大,性能提升越显著。

内容的提问来源于stack exchange,提问作者Tony M.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 00:20:33