You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 11:55:19