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
相关产品推荐
相关产品推荐

