我有一个数组list
,其中包含我想要处理的所有预定义数据。
然后我想制作一个我工作的数组的副本,即洗牌然后弹出一个元素。现在列表为空后,我想重置它,即再次使用list
的内容填充它。
我现在拥有的是:
list = [{...}, {...}, {...}]
list2 = list
shuffle = (a) ->
i = a.length
while --i > 0
j = ~~(Math.random() * (i + 1))
t = a[j]
a[j] = a[i]
a[i] = t
a
get_list_item = ->
shuffle(list2)
list2.pop()
reset_list = ->
list2 = list
但是,在我弹出list2
中的所有项目后,reset_list()
不会重置列表。它仍然是空的
答案 0 :(得分:2)
list2 = list
不会复制list
,它只会创建另一个指向同一数组的指针。因此,当您使用pop()
时,原始(且唯一)数组会丢失元素。
将这些说明替换为list2 = list.slice 0
,它应该像您希望的那样工作。