Flutter/Dart:如何将数组中两个位置的字段值合并到单个变量
问题分析与解决
错误原因
你之前的代码报错type 'String' is not a subtype of type 'int' of 'index',核心问题是x.toJson()['field'][0]['field_value']返回的不是数组类型(而是字符串或其他非数组对象),你却用整数索引[5]去访问它,自然触发类型不匹配错误。
正确实现方式
你的需求是提取field数组中索引0和5对应的field_value并合并到一个变量里,以下是两种可行方案:
方案1:合并为嵌套数组
每个列表项返回包含两个值的数组,最终得到二维列表:
var table = responseModel.response.genericListAnswer.listNode .map((x) { // 取出field数组,确保类型为List final fields = x.toJson()['field'] as List; // 分别提取索引0和5的field_value final val0 = fields[0]['field_value']; final val5 = fields[5]['field_value']; // 合并为数组返回 return [val0, val5]; }) .toList(); // 转成List,方便存入缓存
方案2:合并为键值对对象
用键值对存储两个值,可读性更强:
var table = responseModel.response.genericListAnswer.listNode .map((x) { final fields = x.toJson()['field'] as List; return { 'firstValue': fields[0]['field_value'], 'fifthValue': fields[5]['field_value'], }; }) .toList();
额外注意事项
- 务必调用
.toList():map方法返回的是Iterable,如果要存入缓存,需要转成List类型 - 空值与越界检查:如果
field数组可能为空或长度不足6,建议加判断避免报错,比如:if (fields.length >=6) { // 执行取值逻辑 return [fields[0]['field_value'], fields[5]['field_value']]; } else { // 处理数组长度不足的情况,比如返回默认值 return [null, null]; }
内容的提问来源于stack exchange,提问作者JoshuaaMarkk
相关产品推荐
相关产品推荐

