首页 > 解决方案 > Flutter 在数组中添加项目,但在另一个数组中匹配 id

问题描述

我有这样的数据

{
    "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
}

我需要做的是在单个数组中添加子类别中的所有项目。它的工作正常它像这样工作

 Future<List> dosomestuff() async {
   print(WishList.wishlistArray);

    http.Response res = await http.get(
      'http://retailapi.airtechsolutions.pk/api/menu/2112',
    );

    Map<String, dynamic> map = json.decode(res.body);

    if (map['description'] == "Success") {
      print('show kr ');

      List<dynamic> data = map["Categories"];
      data.forEach((category) {
        if (category['Subcategories'] != null) {
          category['Subcategories'].forEach((subcategory) {
            items['Items'].addAll(
              subcategory['Items']
            );
          });
        }
      });

    }
  }

现在有一个问题,我只需要添加那些 ID 在我的另一个数组中的项目。

其他数组是这个数组中WishList.wishlistArray的数据看起来像这样

[1217, 1216, 1195, 1196, 1197]

我需要的是我只需要添加那些 Id 在这个数组中的项目

标签: flutterdart

解决方案


您可以使用List 的.where()方法按 ID 过滤项目。试试这个代码:

  final allowedItemIds = [1217, 1216, 1195, 1196, 1197];
  List<dynamic> data = map["Categories"];
  data.forEach((category) {
      if (category['Subcategories'] != null) {
        category['Subcategories'].forEach((subcategory) {
          final itemsToAdd = subcategory['Items'];
          final filteredItemsToAdd =
              itemsToAdd.where((item) => allowedItemIds.contains(item['ID']));
          items['Items'].addAll(filteredItemsToAdd);
        });
      }
    },
  );

推荐阅读