重复的地图被添加到列表中

时间:2019-01-22 14:12:50

标签: dart

void main() {
  Map firstMap = { "id": 1, "value": [{"key": "A"}, {"key": "B"}]}; 

  List<Map> newList = [];

  List valueList = firstMap["value"];

  for(int y=0; y<valueList.length; y++) {
    Map newMap = firstMap;
    newMap["value"] = [{"key": valueList[y]["key"]}];

    newList.add(newMap);
  }

  print(newList);
}

我对newList的期望是:

[{id: 1, value: [{key: A}]}, {id: 1, value: [{key: B}]}]

但newList的实际值为

[{id: 1, value: [{key: B}]}, {id: 1, value: [{key: B}]}]

我不确定要在这里尝试什么。

valueList[y]["key"]在每次迭代中似乎都具有正确的值。

上面的代码已共享为此处的飞镖垫的链接。

我将如何实现相同目标?也是我的代码发生了什么,导致了这样的结果。

Open with Dart pad

1 个答案:

答案 0 :(得分:1)

您所做的错误已在注释中提及,重新分配给其他变量不会复制数据:

Map a = {"a": 1}
Map b = a;  // b is just one more reference to same object

b["a"] = 2;

print(a); // ->    {"a": 2}

使用map()

可以方便地完成从一种形状到另一种形状的转换。

https://dartpad.dartlang.org/8283e91c2c201ddb65ef073e76995f1d

void main() {
  Map firstMap = { "id": 1, "value": [{"key": "A"}, {"key": "B"}]};

  List valueList = firstMap["value"];

  List<Map> newList = valueList.map((valueItem) => {
    "id": firstMap["id"],
    "value": [valueItem]
  }).toList();

  print(newList);
}