【问题标题】:Flutter how to merge arraysFlutter 如何合并数组
【发布时间】:2021-01-20 14:14:03
【问题描述】:

我正在获取这样的数据

 Future<List> dosomestuff() async {

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

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

它的显示数据是这样的

 {
    "Categories": [{
            "ID": 1064,
            "Name": "Pizza",
            "Subcategories": [{
                    "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": 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)"
                    },
                    {
                        "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
}

我需要知道的是显示所有数组的项目。意味着在上面的数据中有 2 个子类别的数组,在 1 个数组中有 3 个项目。我需要合并数组 1 和 2 的所有项目,这样总共可以有 6 个。

Expecting output

                   { "Items": [
                        {
                            "ID": 1195,
                            "SubCategoryID": 87,
                            "Name": "Fajita Pizza (S)",

                        },
                        {
                            "ID": 1196,
                            "SubCategoryID": 87,
                            "Name": "Fajita Pizza (M)",

                        },
                        {
                            "ID": 1197,
                            "SubCategoryID": 87,
                            "Name": "Fajita Pizza (L)",

                        },
                        {
                            "ID": 1195,
                            "SubCategoryID": 87,
                            "Name": "Fajita Pizza (S)",

                        },
                        {
                            "ID": 1196,
                            "SubCategoryID": 87,
                            "Name": "Fajita Pizza (M)",

                        },
                        {
                            "ID": 1197,
                            "SubCategoryID": 87,
                            "Name": "Fajita Pizza (L)",

                        }
                    ]
                   }

【问题讨论】:

  • 您可以从实体中提取子类别并将其相互组合。
  • 你能用精确的数据和参数分享预期的输出吗?(文字很好,但精确的输出会更精确)
  • @mozilla_firefox 添加了预期输出
  • 试试这个答案stackoverflow.com/a/45200659/11050506。你需要从 for 循环而不是合并获取数据。

标签: flutter dart


【解决方案1】:

我不知道我是否明白你想要做什么,但你可以试试 addAll 函数

fetchedList = [a, b, 2, 3];
myList = [4, 5, c];
fetchedList.addAll(myList);

print(fetchedList); 
// [a, b, 2, 3, 4, 5, c]

【讨论】:

  • 但是我在数据中没有一个列表,它有多个类别,并且在类别中有多个子类别,然后它在子类别中。你能看看我添加的有问题的数据吗?我现在也添加了扩展结果?
  • 使用forEach传入的数据,可以将每个元素的数据添加到不同的数组中。
【解决方案2】:

希望这些步骤对您有所帮助:

  1. 创建一个新的空地图
  2. 在地图中循环data['Categories']['Subcategories']
  3. 将每个元素放入新地图中

【讨论】:

    【解决方案3】:

    可以使用forEach逐层拆分json数据

    var items = {'Items':[]};
      
    if(map['Categories'] != null){
      map['Categories'].forEach((category){
        if(category['Subcategories'] != null){
          category['Subcategories'].forEach((subcategory){
            items['Items'].addAll(subcategory['Items']);
          });
        }
      });   
    }
    
    print(items);
    

    【讨论】:

    • 嗨 Umaiz Khan,该消息意味着有时使用密钥时数据会变为空。
    • 是的,如果为 null,我可以看到任何可能的内容,所以我们可以忽略它?
    • 我尝试了您更新的答案,但不知道为什么它在项目 {Items: []} 中显示空数组
    • 我尝试使用简单的 null 安全方法,但结果似乎不如预期。我给你传统的解决方案。
    • 也许你可以检查一下密钥。我注意到我将Categories 拼写为Category
    【解决方案4】:
    dynamic data = {
      "Categories": [
        {
          "ID": 1064,
          "Name": "Pizza",
          "Subcategories": [
            {
              "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": 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)"},
                {"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": []
        },
        null
      ],
      "description": "Success",
      "status": 1
    };
    var items = List();
    var categories = data["Categories"];
    categories.forEach((element) {
      if (element == null) return;
      List subCategories = element['Subcategories'];
      subCategories.forEach((element) {
        items.add(element["Items"]);
      });
    });
    items = items.expand((element) => element).toList();
    print(items);
    

    【讨论】:

    • 在数据中,有一个数组在您可以在我的数据中看到的类别中为空。这就是为什么它显示错误 foreach 是调用 null
    • @UmaizKhan 我更新了答案你可以试试吗?
    猜你喜欢
    • 2015-10-22
    • 1970-01-01
    • 1970-01-01
    • 2014-03-05
    • 2010-09-06
    • 2014-07-28
    • 2017-02-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多