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

如何访问嵌套列表中的Map值并筛选符合条件的元素、移除空项

问题原因

你手里的data是嵌套列表结构,外层列表的每一项本身都是只存了单个Map的子列表。你直接对外层列表做where操作时,拿到的参数e是子列表,不是子列表里的Map对象,自然无法读取e['page']属性;你后面写的循环写法是对每个子列表单独做筛选,不符合条件的子列表会返回空的可迭代对象,所以结果里会出现大量空项。

最优解决方案

用expand方法先把嵌套列表拍平成一维的Map序列,再做筛选即可,代码如下:

List data = [[{"number": 1, "page": 1, "Text": "a"}],[{"number": 2, "page": 2, "Text": "b"}],[{"number": 3, "page": 3, "Text": "c"}],[{"number": 4, "page": 4, "Text": "d"}], [{"number": 5, "page": 5, "Text": "e"}],[{"number": 6, "page": 6, "Text": "f"}],[{"number": 7, "page": 7, "Text": "g"}]];

// 先拍平嵌套列表,再筛选符合条件的元素
var filteredResult = data.expand((subList) => subList).where((item) => item['page'] == 1).toList();

expand方法会迭代外层列表的每一个子列表,把子列表里的所有元素展开成一个平铺的序列,拍完平后你拿到的就是每个独立的Map对象,再做where筛选就能正常判断属性,最终得到的结果就是所有符合条件的Map组成的列表,不会有空项。

基于你原有写法的调整方案

如果你不想改动原有循环的逻辑,也可以在生成列表后加一步过滤空项+展开的操作:

var filteredResult = [for(int i = 0;i < data.length; i++) data[i].where((e) => e['page'] == 1)]
    .where((subResult) => subResult.isNotEmpty) // 先过滤掉空的筛选结果
    .expand((subResult) => subResult) // 把嵌套的结果展开成一维列表
    .toList();

内容的提问来源于stack exchange,提问作者Zimor。

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 15:36:00