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

Flutter中数组合并方法及合并同docNo对象的objName实现

在Flutter(Dart)中合并数组及分组处理对象

一、合并两个数组的常见方法

Dart提供了多种合并数组的方式,可根据需求选择:

  • 使用+运算符:返回包含两个数组所有元素的新数组,原数组不受修改

    var list1 = [1, 2, 3];
    var list2 = [4, 5, 6];
    var mergedList = list1 + list2; // 结果: [1,2,3,4,5,6]
    
  • 使用addAll()方法:将第二个数组的元素添加到第一个数组中,直接修改原数组

    var list1 = [1, 2, 3];
    var list2 = [4, 5, 6];
    list1.addAll(list2); // list1变为: [1,2,3,4,5,6]
    
  • 使用扩展运算符...:创建新数组时展开两个数组的元素,不修改原数组

    var list1 = [1, 2, 3];
    var list2 = [4, 5, 6];
    var mergedList = [...list1, ...list2]; // 结果: [1,2,3,4,5,6]
    

二、按docNo分组合并对象

针对你提供的数组,可通过Map分组,将相同docNo的objName整合:

var list = [
  {"docNo": "2023-12", "objName": "img1"},
  {"docNo": "2023-12", "objName": "img2"},
  {"docNo": "2022-10", "objName": "img3"},
  {"docNo": "2022-08", "objName": "img4"},
];

// 用Map分组,key为docNo,value存储对应的objName集合
var groupedMap = <String, dynamic>{};

for (var item in list) {
  var docNo = item["docNo"] as String;
  var objName = item["objName"] as String;
  
  if (groupedMap.containsKey(docNo)) {
    // 已有该docNo,判断当前值类型并添加新objName
    if (groupedMap[docNo] is List) {
      (groupedMap[docNo] as List).add(objName);
    } else {
      // 从单个值转为数组
      groupedMap[docNo] = [groupedMap[docNo], objName];
    }
  } else {
    // 首次出现该docNo,先存为单个值
    groupedMap[docNo] = objName;
  }
}

// 将Map转换为目标格式的列表
var result = groupedMap.entries.map((entry) {
  return {
    "docNo": entry.key,
    "objName": entry.value,
  };
}).toList();

执行后得到的结果与预期一致:

[
  {"docNo": "2023-12", "objName": ["img1", "img2"]},
  {"docNo": "2022-10", "objName": "img3"},
  {"docNo": "2022-08", "objName": "img4"}
]

内容的提问来源于stack exchange,提问作者Carl French

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 00:25:26