如何过滤 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 的列表(我猜)。

然后,添加到element1element1.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);
  
  

【讨论】:

我想要什么,如何将 List name 和 List nameGroup 添加到 List ones 中?这样我就可以使用 List ones 获取数据。 我没听懂,你能改一下问题吗? 你想让name和nameGroup在同一个List吗? 我想过滤元素data,其中元素data在一个列表中,过滤结果元素data也是一个列表。如何将过滤结果元素data以列表的形式添加到列表中? 是的,我想在同一个列表中命名和命名组。

以上是关于如何过滤 List<List<Map<String, dynamic>>> 以在 Flutter 中获取值?的主要内容,如果未能解决你的问题,请参考以下文章

如何把list<map> 变成list<string>

在颤振飞镖中的 List<Map> 内搜索?

list<String>如何转化为Map<String, Object>,list<EmpVO>如何转化为Map<String, Object>

如何将map<string list<>>转换成城map<string,object>

如何取出list数据放入map

如何使用命名查询返回 Map<key,value>?