0

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

但是在我从 中弹出所有项目后list2reset_list()不会重置列表。还是空的

4

1 回答 1

2

list2 = list不会复制list,它只是创建另一个指向同一个数组的指针。因此,当您使用pop()原始(且唯一)数组时,会丢失元素。

将这些说明替换为list2 = list.slice 0它应该可以按照您的意愿工作。

于 2013-05-09T11:50:19.867 回答