Dart中Map遍历报错:JSArray<String>不是String子类型的解决方法
解决Dart Map类型不匹配报错:JSArray 不是 String 的子类型
问题原因
你给Map的value赋值时,用了字符串数组格式(比如sepet["kola"]=["2.5 LT"]),但在print语句里直接把数组和字符串做拼接操作,Dart不允许数组类型与字符串类型直接相加,因此触发类型不匹配错误。
解决方法
根据你的实际需求,有两种处理方式:
方式一:每个key对应单个字符串(推荐)
去掉赋值时的方括号,将value直接设为单个字符串:
void main(){ var sepet = Map(); sepet["kola"] = "2.5 LT"; sepet["süt"] = "yarım yaglı"; sepet["mısır"] = "3 kg"; sepet["bmw"] = "3.20 "; for (var key in sepet.keys){ print(key + ":" + sepet[key]); } for (var value in sepet.keys){ print(value + " : " + sepet[value]); } }
方式二:确实需要存储数组类型的value
在拼接时将数组转换为字符串,可使用join()方法(自定义元素拼接规则)或toString()方法(保留数组原始格式):
void main(){ var sepet = Map(); sepet["kola"] = ["2.5 LT"]; sepet["süt"] = ["yarım yaglı"]; sepet["mısır"] = ["3 kg"]; sepet["bmw"] = ["3.20 "]; for (var key in sepet.keys){ // 用join('')将数组元素转为无分隔符的字符串 print(key + ":" + sepet[key].join('')); } for (var value in sepet.keys){ // 用toString()保留数组的方括号格式 print(value + " : " + sepet[value].toString()); } }
内容的提问来源于stack exchange,提问作者serkan
相关产品推荐
相关产品推荐

