Dart中如何遍历键不固定的嵌套Map获取所有value值
遍历取值方法
你当前的数据是两层嵌套结构:外层是List,List内的每个元素是键名不固定的Map,Map的value才是存储了目标字段的对象,所以没法用固定key直接取值,多遍历一层Map的所有键值对即可。
基础循环实现
直接用你熟悉的for-in写法就行,不需要额外依赖:
List<Map<String, dynamic>> list = [ { '1': { 'value': 'Value number one', }, '2': { 'value': 'Value number two', }, } ]; List<String> result = []; // 第一层遍历外层List for (var item in list) { // 第二层遍历当前Map的所有值,不需要关心key是什么 for (var innerObj in item.values) { result.add(innerObj['value']); } } // 最终result就是 ['Value number one', 'Value number two']
简洁写法(链式调用)
如果习惯用函数式写法,可以用expand扁平化处理,代码更短:
final result = list .expand((element) => element.values) .map((innerObj) => innerObj['value'] as String) .toList();
核心逻辑就是:遇到键名不固定的Map,不要硬编码key去取,直接遍历它的.values(只需要值不需要key时)或者.entries(需要同时拿key和值时)属性,就能拿到所有子元素。如果后续遇到更深的嵌套,按这个逻辑逐层往下遍历即可。
提示:如果数据可能存在空值、或者部分内层对象没有
value字段,取值时记得加空安全判断,比如用innerObj?['value']避免运行时报错。
内容的提问来源于stack exchange,提问作者CCP
相关产品推荐
相关产品推荐

