0

list作業したいすべての定義済みデータを含む配列があります。

次に、作業を行う配列のコピーを作成します。つまり、1 つの要素をシャッフルしてからポップします。リストが空になった後、リストをリセットしたい、つまり の内容を再度入力し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 に答える