flutter:将列表值匹配到映射列表键值

flutter: match list value to map list key value

这里是新手。谁知道我怎样才能将列表 x 的值与列表 y 的键 ["id"] 的值相匹配?

提前致谢!感谢任何帮助。 =)

list x = ["open_box", "close_box"];
list y = 
[
    {
        "id": "open_box",
        "name": "Open",
        "action": ["open_box"]
    },
    {
        "id": "close_box",
        "name": "Close",
        "action": ["open_box", "close_box", "pull_box"]
    },
    {
        "id": "pull_box",
        "name": "Pull",
        "action": ["open_box", "close_box", "pull_box", "push_box"]
    }
]
    list x = ["open_box", "close_box"];
    list y = 
    [
        {
            "id": "open_box",
            "name": "Open",
            "action": ["open_box"]
        },
        {
            "id": "close_box",
            "name": "Close",
            "action": ["open_box", "close_box", "pull_box"]
        },
        {
            "id": "pull_box",
            "name": "Pull",
            "action": ["open_box", "close_box", "pull_box", "push_box"]
        }
    ];
    var i,j;
    var yy=jsonDecode(y);
for(j=0;j<=x.length;j++){
    for(i=0;i<=yy.length;i++){

    if(yy[i]['id'].contains(x[j])){
    
    //Do something if true
    print(yy[i]);
    
    }
    }
}

此代码比较 x[0] 意味着“open_box”到所有 y 的映射数据列表它将打印索引值,其中条件为真

List 提供了一个 where 方法,允许您根据条件过滤列表。这里我使用了 y 列表的 where 方法,并在 x 列表中搜索 y 列表中当前项目的 id 值。我检查 x 列表的搜索长度,如果它大于零,那么我们在 x 列表中找到了 id 的匹配项。 z 将保存 y 列表中与 x 列表中的 ID 匹配的项目列表。

List x = ["open_box", "close_box"];
List y = 
[
        {
                "id": "open_box",
                "name": "Open",
                "action": ["open_box"]
        },
        {
                "id": "close_box",
                "name": "Close",
                "action": ["open_box", "close_box", "pull_box"]
        },
        {
                "id": "pull_box",
                "name": "Pull",
                "action": ["open_box", "close_box", "pull_box", "push_box"]
        }
];
var z = y.where((data) => x.where((value) => value==data["id"]).length>0);
print(z);

这是预期的输出

I/flutter ( 6086): ({id: open_box, name: Open, action: [open_box]}, {id: close_box, name: Close, action: [open_box, close_box, pull_box]})

使用 for in 遍历 x,最后您可以使用 List

中的 where 方法
for (String action in x) {
  dynamic temp = y.where((data) => data['id'] == action);
  if (temp.isNotEmpty) {
    // do someting
    print(temp);
  }
}

参考:Dart Documentation - List