Dart:如何筛选出指定字段值在列表中的Map列表?
解决Map列表按指定字段值筛选的问题
嘿,我来帮你搞定这个问题!先看你原代码里的小疏漏:你在where的回调里写了list['name'],这可不对哦——list是整个列表对象,你得用当前迭代到的元素o来取name字段才行,也就是o['name']。
下面给你正确的实现方案:
正确代码示例
void main() { List<Map<String, dynamic>> list = [{'id':1, 'name':'a'}, {'id':2, 'name':'b'}]; List<String> item = ['a']; // 修正取值逻辑,同时用toList()把Iterable转成List类型 List<Map<String, dynamic>> filteredList = list.where((o) => item.contains(o['name'])).toList(); print(filteredList); // 输出: [{id: 1, name: a}] }
不同场景的验证结果
- 当
item = ['a', 'b']时,输出结果是:[{id: 1, name: a}, {id: 2, name: b}] - 当
item = ['b']时,输出结果是:[{id: 2, name: b}] - 如果
item是空列表,会返回空列表,完全符合预期
额外小提示
- 别忘了在
where()后面加toList()!因为where()返回的是Iterable类型,不是直接的List,如果需要List格式的结果必须做这个转换。 - 如果你的Map列表里可能存在没有
name字段的元素,建议加个空值判断避免报错:list.where((o) => o['name'] != null && item.contains(o['name'])).toList();
内容的提问来源于stack exchange,提问作者delmin
相关产品推荐
相关产品推荐

