flutter - 颤振在数组中添加有条件的项目
问题描述
我正在从 api 获取数据,api 的输出是这样的:
{
"Categories": [{
"ID": 1064,
"Name": "Pizza",
"Subcategories": [{
"ID": 87,
"CategoryID": 1064,
"CategoryName": "Pizza",
"Items": [{
"ID": 1195,
"Name": "Fajita Pizza (S)"
"IsFeatured": true,
},
{
"ID": 1196,
"Name": "Fajita Pizza (M)"
},
{
"ID": 1197,
"Name": "Fajita Pizza (L)"
}
]
},
{
"ID": 87,
"CategoryID": 1064,
"CategoryName": "Pizza",
"Items": [{
"ID": 1195,
"Name": "Fajita Pizza (S)"
},
{
"ID": 1196,
"Name": "Fajita Pizza (M)"
},
{
"ID": 1197,
"Name": "Fajita Pizza (L)"
}
]
}
]
},
{
"ID": 1064,
"Name": "Pizza",
"Subcategories": [{
"ID": 87,
"CategoryID": 1064,
"CategoryName": "Pizza",
"Items": [{
"ID": 1195,
"Name": "Fajita Pizza (S)"
"IsFeatured": true,
},
{
"ID": 1196,
"Name": "Fajita Pizza (M)"
},
{
"ID": 1197,
"Name": "Fajita Pizza (L)"
}
]
}]
},
{
"ID": 1084,
"Name": "beverages",
"Description": null,
"Image": null,
"StatusID": 1,
"LocationID": 2112,
"Subcategories": []
}
],
"description": "Success",
"status": 1
}
通过 foreach 循环,我将所有项目数组放在一个这样的数组中。
data.forEach((category) {
if (category['Subcategories'] != null) {
category['Subcategories'].forEach((subcategory) {
items['Items'].addAll(subcategory['Items']);
});
}
});
它的工作也很好,现在我需要对"IsFeatured": true,
所有项目数组中没有 IsFeatured 的项目执行此操作,只有一些项目有。所以我需要做的就是添加那些具有 IsFeatured True 的项目。
解决方案
你可以看看更实用的方法来完成你正在做的事情。尤其是Dartmap
的.where
Iterable
在调用forEach
内部循环之前,您可以调用where
. 这需要一个函数(就像forEach
那样),该函数返回true
或 false . If the condition is
true` 项目保留在列表中,否则将被过滤掉。
像这样的东西:
category['Subcategories']
.where((subcategory) => subcategory.isFeatured)
.forEach((subcategory) {
items['Items'].addAll(subcategory['Items']);
});
编辑:我没有意识到有问题的属性实际上是下一层,即项目的一部分。因此,将其与 null 安全访问相结合,我们可能会得到类似的结果:
data.forEach((category) {
category['Subcategories']?.forEach((subcategory) {
items['Items'].addAll(subcategory['Items'].where((s) => s['IsFeatured'] as bool));
});
});
您可能需要根据您的实际数据模型以及您可以对值的存在做出哪些假设来调整一些事情。在示例代码中,我假设IsFeatured
是 never null
。情况可能并非如此,因此请注意那里的错误。
推荐阅读
- java - 如何在 Apache Camel 中发送带有参数的 REST 请求
- stenciljs - 从“../types/globals”导入类型 { 组件,JSX };dist 路径错误
- sql - SQL,仅检索其多对多关系的所有 ID 都在数组中的条目
- python - 如何消除 PIL 和 pygame 图像之间的差异
- python - 使用 Python 批量下载 FTP Urls
- firebase - 没有使用 uvicorn main:app --reload 名为“firebase_admin”的模块
- while-loop - ksh 无法从 while 循环中导出变量
- java - 如何修复此 JDA discord bot 错误?
- java - 如果需要转换内部列表,如何将 EntityA 列表转换为 EntityB 列表?
- google-sheets - 谷歌表格电报