【问题标题】:How can I filter List<List<Map<String, dynamic>>> to get a value in Flutter?如何过滤 List<List<Map<String, dynamic>>> 以在 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);
});

我该如何解决?

【问题讨论】:

  • 感谢您编辑我的问题。 ????

标签: arrays list flutter search


【解决方案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以列表的形式添加到列表中?
    • 是的,我想在同一个列表中命名和命名组。
    猜你喜欢
    • 2019-10-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-25
    • 2023-02-08
    • 1970-01-01
    • 2021-06-09
    • 2021-09-01
    • 2021-07-26
    相关资源
    最近更新 更多