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

JavaScript对象数组按条件合并:为Recipient对象补充订阅信息

问题

我有以下三个JavaScript对象数组:

let recipients = [{"blackList":"0","clawfulBasis":"3","cmOneID":"0","id":"13251316","jurisdiction":"SCPB - LON","name":"David G","relationshipManager":"Adam Cavalier","subscription":"","_schema":"nms:recipient"},{"blackList":"0","clawfulBasis":"3","cmOneID":"666666","id":"13251376","jurisdiction":"Guernsey","name":"David Llanos Changed Garcia","relationshipManager":"Adam Cavalier","_schema":"nms:recipient"}];

let services = [{"id":"3218143","name":"SVC27","label":"UK > Financial Advisers > Services"},{"id":"3721","name":"newsletter","label":"Newsletter"},{"id":"15656200","name":"SVC35","label":"Sustainability"}]

let serviceSubscriptions =  [{"recipientId":"13251316","serviceId":"3218143"},{"recipientId":"13251376","serviceId":"15656200"},{"recipientId":"13251376","serviceId":"15656200"},{"recipientId":"13251376","serviceId":"3721"}]

其中serviceSubscriptions存储了收件人与订阅服务的关联关系,我需要以Recipient对象的id和serviceSubscriptions的recipientId为匹配依据,给每个Recipient对象补充去重后的serviceId数组,预期效果示例如下:

{"blackList":"0","clawfulBasis":"3","cmOneID":"666666","id":"13251376","jurisdiction":"Guernsey","name":"David Llanos Changed Garcia","relationshipManager":"Adam Cavalier","subscriptions":"[3218143,15656200,3721]","_schema":"nms:recipient"}
解决方案

实现逻辑

  1. 先将serviceSubscriptions转换为以recipientId为键的映射表,利用Set自动去重,避免重复遍历订阅数组,提升处理效率;
  2. 遍历recipients数组,为每个收件人添加subscriptions字段,从映射表中取出对应去重后的serviceId数组,并格式化为示例要求的字符串格式。

代码实现

// 构建收件人订阅映射表,自动去重serviceId
const subscriptionMap = serviceSubscriptions.reduce((map, item) => {
  const { recipientId, serviceId } = item;
  if (!map[recipientId]) {
    map[recipientId] = new Set();
  }
  map[recipientId].add(serviceId);
  return map;
}, {});

// 为每个收件人补充订阅信息
const updatedRecipients = recipients.map(recipient => {
  const serviceIds = Array.from(subscriptionMap[recipient.id] || []);
  return {
    ...recipient,
    subscriptions: `[${serviceIds.join(',')}]`
  };
});

// 打印结果
console.log(JSON.stringify(updatedRecipients, null, 2));

运行结果

执行后updatedRecipients的输出内容如下:

[
  {
    "blackList": "0",
    "clawfulBasis": "3",
    "cmOneID": "0",
    "id": "13251316",
    "jurisdiction": "SCPB - LON",
    "name": "David G",
    "relationshipManager": "Adam Cavalier",
    "subscription": "",
    "_schema": "nms:recipient",
    "subscriptions": "[3218143]"
  },
  {
    "blackList": "0",
    "clawfulBasis": "3",
    "cmOneID": "666666",
    "id": "13251376",
    "jurisdiction": "Guernsey",
    "name": "David Llanos Changed Garcia",
    "relationshipManager": "Adam Cavalier",
    "_schema": "nms:recipient",
    "subscriptions": "[15656200,3721]"
  }
]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 06:15:40