Dart中无法使用.insert向对象数组插入对象问题求助
问题分析与解决方案
你当前使用insert方法的问题在于:insert是直接向数组中添加新的数组元素,执行后数组里会出现两个独立的shelf1对象,而非把新内容合并到已有的shelf1对应的列表中,完全不符合你"目标对象已存在则添加内容"的需求。
正确实现思路
- 提取新对象中的目标键(比如
shelf1) - 遍历数组,用
containsKey检查是否存在包含该键的对象 - 若找到:用
add方法将新条目添加到该键对应的列表中 - 若未找到:将新对象(保持与原有结构一致,值为数组形式)用
insert插入数组
修改后的代码
void main() { var arr = [ { "shelf1": [ { "Entry": "something", "Status": "", "Account": "", "Address": "", "Result": null } ] }, { "shelf2": [ { "Entry": "something", "Status": "", "Account": "", "Address": "", "Result": null } ] }, { "shelf3": [ { "Entry": "something", "Status": "", "Account": "", "Address": "", "Result": null } ] } ]; var newObject = { "shelf1": { "Entry": "something2", "Status": "", "Account": "", "Address": "", "Result": null } }; // 获取新对象的目标键 String targetKey = newObject.keys.first; bool isExist = false; // 遍历数组查找已存在的目标键对象 for (var item in arr) { if (item.containsKey(targetKey)) { // 将新条目添加到对应列表中 (item[targetKey] as List).add(newObject[targetKey]); isExist = true; break; } } // 未找到则插入新对象(保持值为数组的结构) if (!isExist) { arr.insert(0, {targetKey: [newObject[targetKey]]}); } print(arr); }
关键说明
- 原有数组中每个元素都是
Map,且键对应的值是列表类型,添加新内容时必须确保结构一致,不能直接插入单个对象 - 遍历检查的逻辑是核心,替代了直接
insert的粗暴添加,实现了"存在则合并,不存在则新增"的需求
内容的提问来源于stack exchange,提问作者Rurren
相关产品推荐
相关产品推荐

