Flutter/Dart中如何修改Map列表中的指定元素
问题
我有一个Map类型的列表,想要通过元素的id修改对应元素的name值。给定的列表如下:
List items = [{'id':'01','name':'Rahul'},{'id':'02','name':'John'},{'id':'03','name':'Marry'}];
需要实现一个方法,点击按钮时根据传入的id更新对应元素的name,方法定义如下:
void editName(String id,String name){ // 此处需实现根据id修改name的逻辑 }
调用editName('02','Rose')后,期望得到的结果为:
[{'id':'01','name':'Rahul'},{'id':'02','name':'Rose'},{'id':'03','name':'Marry'}];
解决方案
提供几种实用的实现方式:
方式一:遍历列表直接修改
通过forEach遍历列表,匹配到目标id后直接更新name值:
void editName(String id, String name) { items.forEach((item) { if (item['id'] == id) { item['name'] = name; } }); }
方式二:精准定位目标元素
使用firstWhere直接找到匹配id的元素,搭配orElse处理无匹配的情况,避免报错:
void editName(String id, String name) { var targetItem = items.firstWhere( (item) => item['id'] == id, orElse: () => {}, // 无匹配时返回空Map ); if (targetItem.isNotEmpty) { targetItem['name'] = name; } }
方式三:生成新列表(不修改原列表)
如果需要保留原列表不变,可通过map生成包含更新后元素的新列表:
List editName(String id, String name) { return items.map((item) { return item['id'] == id ? {...item, 'name': name} : item; }).toList(); }
内容的提问来源于stack exchange,提问作者Murali Krishnan
相关产品推荐
相关产品推荐

