Dart:如何迭代嵌套 Map 中数组中的对象?

Dart: How to iterate over objects in an array in a nested Map?

这是我在 Dart 中使用的地图数据结构的当前状态:

Map database = {
    'campusConnect': {
        'hashtags': [
             {
                 'id': 4908504398, 
                 'title': '#NeverGiveUp!', 
                 'author': 'ABC',  
             }, 
             {
                  'id': 430805, 
                 'title': '#ItAlwaysTakesTime', 
                 'author': 'XYZ'
             }
         ]
     }
};

我想查看主题标签数组。遍历该数组中的每个对象,我想将 'id' 字段与我已有的一些数字进行比较。我该怎么做?

到目前为止,这是我尝试过的:

database['campusConnect']['hashtags'].map( (item) {
    print('I am here ...');
    if (item['id'] == hashtagId) {
        print(item['title']);
    }
});

我不知道为什么,但它没有给我任何错误并且不能同时工作。当我 运行 它时,它甚至不打印“我在这里......”。

注意 if 块中的标识符“hashtagId”:

if (item['id'] == hashtagId) { ... }

这是作为参数传递给函数的。为简单起见,我没有显示函数,但假设这是我收到的一个 int 类型的参数

我该如何完成?

下面的方法可以解决你的问题。

  void test(){
    final hashTags = database['campusConnect']['hashTags'];
    if(hashTags is List){
      for(var i=0; i<hashTags.length; i++){
        final id = hashTags[i]['id'];
        if(id == hashtagId){
          // do something
        }
      }
    }
  }

Dart 足够聪明,可以跳过不执行任何操作的代码。在您的情况下,您没有使用 map() 函数的结果。尝试用 forEach() 更改它并修复 hashTags 拼写错误

  database['campusConnect']['hashTags'].forEach((item) {
    print('I am here ...');
    if (item['id'] == hashtagId) {
      print(item['title']);
    }
  });