如何过滤 List<List<Map<String, dynamic>>> 以在 Flutter 中获取值?
Posted
技术标签:
【中文标题】如何过滤 List<List<Map<String, dynamic>>> 以在 Flutter 中获取值?【英文标题】:How can I filter List<List<Map<String, dynamic>>> to get a value in Flutter? 【发布时间】:2021-03-14 13:55:00 【问题描述】:我有 JSON 数据,我正在使用 await jsonDecode 加载到 List>>
例如,我有一个;
我需要过滤儿子得到name
值:Abdul Fatah
如果我有一个name_group
= alpukat。
如何过滤 List JSON 数据以在 Flutter 中获取值?
[
"receive_brutto" : 10,
"receive_netto" : 20,
"receive_reject" : 30,
"data" : [
"id_trx_procurement" : 1,
"item_group_id" : 3135,
"date_proc" : "2020-11-29",
"trx_procurement2" :
"user_proc" :
"user" :
"name" : "Abdul Fatah"
,
"item_group_proc" :
"name_group" : "Alpukat",
"uom_item_group_name" : "Kg"
,
"uom_proc" :
"name" : "Kg"
,
"id_trx_procurement" : 2,
"item_group_id" : 3135,
"date_proc" : "2020-11-29",
"trx_procurement2" :
"user_proc" :
"user" :
"name" : "Abdul Fatah"
,
"item_group_proc" :
"name_group" : "Apel",
"uom_item_group_name" : "Kg"
,
"uom_proc" :
"name" : "Kg"
]
,
"receive_brutto" : 10,
"receive_netto" : 20,
"receive_reject" : 30,
"data" : [
"id_trx_procurement" : 1,
"item_group_id" : 3135,
"date_proc" : "2020-11-29",
"trx_procurement2" :
"user_proc" :
"user" :
"name" : "Abdul Fatah"
,
"item_group_proc" :
"name_group" : "Alpukat",
"uom_item_group_name" : "Kg"
,
"uom_proc" :
"name" : "Kg"
,
"id_trx_procurement" : 2,
"item_group_id" : 3135,
"date_proc" : "2020-11-29",
"trx_procurement2" :
"user_proc" :
"user" :
"name" : "Abdul Fatah"
,
"item_group_proc" :
"name_group" : "Apel",
"uom_item_group_name" : "Kg"
,
"uom_proc" :
"name" : "Kg"
]
]
我想要结果过滤列表data
和数据列表添加到列表中,
这是我的代码,但不起作用。
List<E> listItemReceive;
listItemReceive.forEach((element1)
element1.data.forEach((element2)
if (element2.itemGroupProc.namegroup
.toLowerCase()
.contains(text.toLowerCase()) ||
element2.trxProcurement2.userProc.user.name
.toLowerCase()
.contains(text.toLowerCase()))
tmp2.add(element2);
element1.add(tmp2);
);
tmplistItemReceive.add(element1);
);
我该如何解决?
【问题讨论】:
感谢您编辑我的问题。 ???? 【参考方案1】:根据您的代码正在执行的操作。对于每个element1
,您将从element1.data
中过滤掉一些设计项。进入一个名为 tmp2
的列表(我猜)。
然后,添加到element1
:element1.add(tmp2);
添加到element1
后。您不会重置并为下一次迭代分配新的tmp2
。所以tmp2
会继续增长
【讨论】:
【参考方案2】:您可以使用键遍历列表。请看下面过滤掉所有名字和name_group的代码。
void main()
List<Map<String, dynamic>> one = [
"receive_brutto": 10,
"receive_netto": 20,
"receive_reject": 30,
"data": [
"id_trx_procurement": 1,
"item_group_id": 3135,
"date_proc": "2020-11-29",
"trx_procurement2":
"user_proc":
"user": "name": "Abdul Fatah"
,
"item_group_proc":
"name_group": "Alpukat",
"uom_item_group_name": "Kg"
,
"uom_proc": "name": "Kg"
,
"id_trx_procurement": 2,
"item_group_id": 3135,
"date_proc": "2020-11-29",
"trx_procurement2":
"user_proc":
"user": "name": "Abdul Fatah"
,
"item_group_proc":
"name_group": "Apel",
"uom_item_group_name": "Kg"
,
"uom_proc": "name": "Kg"
]
,
"receive_brutto": 10,
"receive_netto": 20,
"receive_reject": 30,
"data": [
"id_trx_procurement": 1,
"item_group_id": 3135,
"date_proc": "2020-11-29",
"trx_procurement2":
"user_proc":
"user": "name": "Abdul Fatah"
,
"item_group_proc":
"name_group": "Alpukat",
"uom_item_group_name": "Kg"
,
"uom_proc": "name": "Kg"
,
"id_trx_procurement": 2,
"item_group_id": 3135,
"date_proc": "2020-11-29",
"trx_procurement2":
"user_proc":
"user": "name": "Abdul Fatah"
,
"item_group_proc":
"name_group": "Apel",
"uom_item_group_name": "Kg"
,
"uom_proc": "name": "Kg"
]
];
List<String> names = [];
one.forEach((item)=>
(item['data'] as List).forEach((item2)=>
names.add(item2['trx_procurement2']['user_proc']['user']['name'])
)
);
print(names);
List<String> nameGroup = [];
one.forEach((item)=>
(item['data'] as List).forEach((item2)=>
nameGroup.add(item2['item_group_proc']['name_group'])
)
);
print(nameGroup);
【讨论】:
我想要什么,如何将 Listname
和 List nameGroup
添加到 List ones
中?这样我就可以使用 List ones
获取数据。
我没听懂,你能改一下问题吗?
你想让name和nameGroup在同一个List吗?
我想过滤元素data
,其中元素data
在一个列表中,过滤结果元素data
也是一个列表。如何将过滤结果元素data
以列表的形式添加到列表中?
是的,我想在同一个列表中命名和命名组。以上是关于如何过滤 List<List<Map<String, dynamic>>> 以在 Flutter 中获取值?的主要内容,如果未能解决你的问题,请参考以下文章
list<String>如何转化为Map<String, Object>,list<EmpVO>如何转化为Map<String, Object>