首页 > 解决方案 > 颤振在数组中添加有条件的项目

问题描述

我正在从 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 的项目。

标签: flutterdart

解决方案


你可以看看更实用的方法来完成你正在做的事情。尤其是Dartmap的.whereIterable

在调用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。情况可能并非如此,因此请注意那里的错误。


推荐阅读