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

Flutter如何合并数组中providerName相同的元素并整合其余数据

Flutter实现同providerName字段数组合并方案

实现逻辑说明

  • 先用一个Map<String, dynamic>作为临时分组容器,key存储providerName的取值,value存储对应合并后的结构
  • 遍历原始数组,每拿到一条数据先判断当前providerName是否已在Map中存在:
    • 不存在则新增一条记录,将除providerName外的其余字段存入dataMerge数组
    • 存在则直接把除providerName外的其余字段追加到对应dataMerge数组末尾
  • 最后把Map的所有value转换为List即可得到目标格式的数组

完整可运行代码示例

void main() {
  // 你的原始数组
  List<Map<String, dynamic>> originList = [
    {
      "providerName": "ABC",
      "data1": "asd",
      "data2": "asd"
    },
    {
      "providerName": "ABC",
      "data1": "asd",
      "data2": "asd"
    },
    {
      "providerName": "DEF",
      "data1": "dsa",
      "data2": "dosa"
    },
    {
      "providerName": "GHI",
      "data1": "ghg",
      "data2": "hg"
    }
  ];

  // 临时分组Map
  Map<String, Map<String, dynamic>> tempMap = {};

  for (var item in originList) {
    String providerName = item['providerName'];
    // 提取除providerName外的所有字段,不修改原始数据
    Map<String, dynamic> dataItem = Map.from(item)..remove('providerName');

    if (tempMap.containsKey(providerName)) {
      // 已存在对应分组,追加数据
      tempMap[providerName]?['dataMerge'].add(dataItem);
    } else {
      // 不存在对应分组,新增记录
      tempMap[providerName] = {
        'providerName': providerName,
        'dataMerge': [dataItem]
      };
    }
  }

  // 转换为最终目标数组
  List<Map<String, dynamic>> targetList = tempMap.values.toList();
  
  // 打印验证输出
  print(targetList);
}

如果你项目用强类型实体类管理数据,只需要先把原始数据解析为实体对象,按照完全相同的分组逻辑处理后,再转为目标实体类即可。

内容的提问来源于stack exchange,提问作者rameez khan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 23:09:03