我知道如何使用Map<dynamic, dynamic>
()方法将Map.from转换为Map<String, dynamic>
。但是,如果我有未指定数量的嵌套映射呢?如何将所有潜在的子级也从Map<dynamic, dynamic>
转换为Map<String, dynamic>
发布于 2021-12-21 12:35:57
您可以使用递归方法来解决这个问题,其中Map
类型的所有映射值也都是递归转换的。
// recursively convert the map
Map<String, dynamic> convertMap(Map<dynamic, dynamic> map) {
map.forEach((key, value) {
if (value is Map) {
// it's a map, process it
value = convertMap(value);
}
});
// use .from to ensure the keys are Strings
return Map<String, dynamic>.from(map);
// more explicit alternative way:
// return Map.fromEntries(map.entries.map((entry) => MapEntry(entry.key.toString(), entry.value)));
}
// example nested map with dynamic values
Map<dynamic, dynamic> nestedMap = {
'first': 'value',
'second': {
'foo': 'bar',
'yes': 'ok',
'map': {'some': 'value'},
}
};
// convert the example map
Map<String, dynamic> result = convertMap(nestedMap);
print(result);
发布于 2022-02-20 01:07:45
与fravolt的答案相同,但我无法在注释中添加代码:
Map.forEach不通过引用来处理值。你可以改为:
// recursively convert the map
Map<String, dynamic> convertMap(Map<dynamic, dynamic> map) {
for (var key in map.keys) {
if (map[key] is Map) {
map[key] = convertMap(map[key]);
}
} // use .from to ensure the keys are Strings
return Map<String, dynamic>.from(map);
// more explicit alternative way:
// return Map.fromEntries(map.entries.map((entry) => MapEntry(entry.key.toString(), entry.value)));
}
https://stackoverflow.com/questions/70434976
复制相似问题