如何使用数组副本并在以后重置它

时间:2013-05-09 11:40:33

标签: coffeescript

我有一个数组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()不会重置列表。它仍然是空的

1 个答案:

答案 0 :(得分:2)

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

将这些说明替换为list2 = list.slice 0,它应该像您希望的那样工作。