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

