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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 11:42:40