我编写了这个小示例,以便您理解我的问题。我做了一个列表的副本,我从副本中删除了一些值,但它们也从原始列表中删除了。为什么会发生这种情况?
错误是:Uncaught error: Concurrent modification during iteration: Instance of 'JSArray'.
void main()
{
List<String> list1 = ['jose', 'maria', 'eduardo','emiliano','paula'];
List<String> list2 = [];
list2 = list1;
for(var name in list1)
{
String nameAux = name;
print(nameAux);
list2.removeLast();
}
}
我需要原始列表不像复制
那样删除元素
感谢这里有几点:
首先,下面的代码只将引用复制到列表,而不复制列表本身
list2 = list1;
,你可以使用
List<String> list2 = List.from(list1);
更多细节在这篇文章
然后,你会有另一个错误,你不能从列表中删除项目,而迭代列表
for(var name in list1)
{
list2.removeLast();
}
如果你真的需要这样做,那就用这个来代替,但是当你删除一个项目时要小心,下一个项目会移动:
for(var i = 0; i < this.gamesList.length; i++)