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

如何合并银行与用户账户两个API的嵌套数据并格式化输出

多API数据关联处理方案

需求梳理

  • 现有2个API接口分别返回银行基础信息、用户账户信息
  • 单个用户可在同一家银行开通多个账户,需将每条用户账户记录与对应银行的名称、logo等全量信息绑定,输出扁平的关联后结构,供前端组件直接使用

原始API返回数据示例

银行API返回格式

[
    {
      "id": 2,
      "name": "KlikBCA",
      "bank_code": "KlikBCA",
      "country_code": "ID",
      "country_name": "India",
      "logo": "url",
      "createdAt": null,
      "updatedAt": "2021-07-26T14:58:03.000+00:00",
      "channels": null
    },
    {
      "id": 7,
      "name": "BNI Internet Banking",
      "bank_code": "BNI Internet Banking",
      "country_code": "ID",
      "country_name": "Indis",
      "primary_color": "url",
      "logo": null,
      "createdAt": null,
      "updatedAt": "2021-07-26T14:58:03.000+00:00",
      "channels": null
    }
]

用户账户API返回格式

[
  {
    "id": "sdf",
    "bankId": "7",
    "data": [
      {
        "accountId": "1234",
        "accountHolder": "John Doe",
        "accountNumber": "587-2673-989",
        "balances": {
          "available": 500000
        }
      },
      {
         "accountId": "2345",
        "accountHolder": "John Doe",
        "accountNumber": "987-0675-789",
        "balances": {
          "available": 7500000
        }
      }
    ]
  },
  {
    "id": "f230",
    "bankId": "3",
    "data": [
      {
        "accountId": "9876",
        "accountHolder": "Charls",
        "accountNumber": "765-6543-345",
        "balances": {
          "available": 200000
        }
      }
    ]
  }
]

处理逻辑

  1. 先将银行接口返回的数组转换为以银行ID为键的映射对象,降低后续匹配查询的时间复杂度
  2. 遍历用户账户接口的每一条记录,将每条记录下的多账户数组拆分,单个账户生成一条独立的关联数据
  3. 通过每条用户记录的bankId从银行映射对象中匹配对应银行信息,补充到账户记录的bank字段中
  4. 增加银行信息不存在的兜底逻辑,避免匹配不到数据时报错

代码实现(JavaScript)

// 入参:bankList为银行API返回数组,userList为用户账户API返回数组
function formatAccountData(bankList, userList) {
  // 生成银行ID映射表
  const bankMap = new Map(bankList.map(bank => [bank.id, bank]))
  const result = []
  userList.forEach(userBankRecord => {
    const bankId = Number(userBankRecord.bankId)
    const bankInfo = bankMap.get(bankId) || {
      // 匹配不到银行信息时的兜底默认值,可按需修改
      name: '未知银行',
      logo: null
    }
    // 拆分多账户
    userBankRecord.data.forEach(account => {
      result.push({
        id: userBankRecord.id,
        bankId: userBankRecord.bankId,
        data: account,
        bank: bankInfo
      })
    })
  })
  return result
}

输出结果格式

[
    {
    "id": "sdf",
    "bankId": "7",
    "data": 
        {
        "accountId": "1234",
        "accountHolder": "John Doe",
        "accountNumber": "587-2673-989",
        "balances": {
            "available": 500000
        }
        },
    "bank":{
        "id": 7,
        "name": "BNI Internet Banking",
        "bank_code": "BNI Internet Banking",
        "country_code": "ID",
        "country_name": "Indis",
        "primary_color": "url",
        "logo": null,
        "createdAt": null,
        "updatedAt": "2021-07-26T14:58:03.000+00:00",
        "channels": null
        }
    },
    {"id": "sdf",
    "bankId": "7",
    "data": {
        "accountId": "2345",
        "accountHolder": "John Doe",
        "accountNumber": "987-0675-789",
        "balances": {
        "available": 7500000
        }
    },
    "bank":{
        "id": 7,
        "name": "BNI Internet Banking",
        "bank_code": "BNI Internet Banking",
        "country_code": "ID",
        "country_name": "Indis",
        "primary_color": "url",
        "logo": null,
        "createdAt": null,
        "updatedAt": "2021-07-26T14:58:03.000+00:00",
        "channels": null
        }
    },
    {
    "id": "f230",
    "bankId": "3",
    "data": {
        "accountId": "9876",
        "accountHolder": "Charls",
        "accountNumber": "765-6543-345",
        "balances": {
            "available": 200000
        }
    },
    "bank":{
        "name": "未知银行",
        "logo": null
        }
    }
]

内容的提问来源于stack exchange,提问作者Rini Jaiswal

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 14:15:05