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

如何匹配payload中两个lines数组的number并替换labelnumber值

需求说明

需要根据payload.lines.number = payload.notification.body.lines.number的匹配规则,将notification.body.lines中的labelnumber值替换为主lines数组中对应number的labelnumber值,同时保留notification.body中的其他元素(如示例中的date)不变。

输入Payload

{
  "date": "2022-11-15T19:24:36.871Z",
  "lines": [
    {
      "number": "123",
      "labelnumber":"ABC",
      "received": "2022-11-15T19:30:17.955Z"
    },
    {
      "number": "456",
      "labelnumber":"DFG",
      "received": "2022-11-15T19:30:57.426Z"
    },
    {
      "number": "789",
      "labelnumber":"HIJ",
      "received": "2022-11-15T19:31:49.042Z"
    }
  ],
  "notification":{
    "body":{
      "date": "2022-11-15T19:24:36.871Z",
      "lines": [
        {
          "number": "123",
          "labelnumber":"",
          "received": "2022-11-15T19:30:17.955Z"
        },
        {
          "number": "123",
          "labelnumber":"",
          "received": "2022-11-15T19:30:57.426Z"
        },
        {
          "number": "456",
          "labelnumber":"",
          "received": "2022-11-15T19:31:49.042Z"
        },
        {
          "number": "789",
          "labelnumber":"",
          "received": "2022-11-15T19:31:49.042Z"
        },
        {
          "number": "789",
          "labelnumber":"",
          "received": "2022-11-15T19:31:49.042Z"
        }
      ]
    }
  }
}

预期Payload

{
  "date": "2022-11-15T19:24:36.871Z",
  "lines": [
    {
      "number": "123",
      "labelnumber":"ABC",
      "received": "2022-11-15T19:30:17.955Z"
    },
    {
      "number": "456",
      "labelnumber":"DFG",
      "received": "2022-11-15T19:30:57.426Z"
    },
    {
      "number": "789",
      "labelnumber":"HIJ",
      "received": "2022-11-15T19:31:49.042Z"
    }
  ],
  "notification":{
    "body":{
      "date": "2022-11-15T19:24:36.871Z",
      "lines": [
        {
          "number": "123",
          "labelnumber":"ABC",
          "received": "2022-11-15T19:30:17.955Z"
        },
        {
          "number": "123",
          "labelnumber":"ABC",
          "received": "2022-11-15T19:30:57.426Z"
        },
        {
          "number": "456",
          "labelnumber":"DFG",
          "received": "2022-11-15T19:31:49.042Z"
        },
        {
          "number": "789",
          "labelnumber":"HIJ",
          "received": "2022-11-15T19:31:49.042Z"
        },
        {
          "number": "789",
          "labelnumber":"HIJ",
          "received": "2022-11-15T19:31:49.042Z"
        }
      ]
    }
  }
}

解决方案

实现思路

  1. 先将主lines数组转换为以number为键、labelnumber为值的映射对象,快速匹配对应值,避免重复遍历主数组提升效率。
  2. 遍历notification.body.lines数组,根据每个元素的number从映射对象中取出对应labelnumber赋值。
  3. 保留原Payload所有结构与其他元素不变。

代码示例(JavaScript)

// 输入的原始payload
const payload = {
  "date": "2022-11-15T19:24:36.871Z",
  "lines": [
    { "number": "123", "labelnumber":"ABC", "received": "2022-11-15T19:30:17.955Z" },
    { "number": "456", "labelnumber":"DFG", "received": "2022-11-15T19:30:57.426Z" },
    { "number": "789", "labelnumber":"HIJ", "received": "2022-11-15T19:31:49.042Z" }
  ],
  "notification":{
    "body":{
      "date": "2022-11-15T19:24:36.871Z",
      "lines": [
        { "number": "123", "labelnumber":"", "received": "2022-11-15T19:30:17.955Z" },
        { "number": "123", "labelnumber":"", "received": "2022-11-15T19:30:57.426Z" },
        { "number": "456", "labelnumber":"", "received": "2022-11-15T19:31:49.042Z" },
        { "number": "789", "labelnumber":"", "received": "2022-11-15T19:31:49.042Z" },
        { "number": "789", "labelnumber":"", "received": "2022-11-15T19:31:49.042Z" }
      ]
    }
  }
};

// 创建number与labelnumber的映射表
const labelMap = payload.lines.reduce((map, line) => {
  map[line.number] = line.labelnumber;
  return map;
}, {});

// 替换notification.body.lines中的labelnumber
payload.notification.body.lines.forEach(line => {
  if (labelMap[line.number]) {
    line.labelnumber = labelMap[line.number];
  }
});

// 输出处理后的结果
console.log(JSON.stringify(payload, null, 2));

说明

  • 映射表仅需遍历一次主lines数组,后续匹配均为O(1)时间复杂度,大数据量场景下效率更高。
  • 代码仅修改notification.body.lines中的labelnumber字段,原Payload其他结构与元素完全保留。
  • 若notification.body.lines中存在主lines未匹配的number,将保留原labelnumber值,兼容边界情况。

内容的提问来源于stack exchange,提问作者Jesus Abraham Felix González

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 07:30:49