2014-04-04 237 views
0

我創建了一個簡單的問題和答案遊戲來幫助修改版本,並且無法在第二次重新添加陣列時遇到問題。Javascript - 從另一個陣列中重新填充一個陣列

單擊按鈕時,執行以下代碼。

if(setSelection == 0){ 
    tempQuestions = chosenQuestion; 
    tempAnswers = chosenAnswer; 
} 

這是第一次。

當選擇了正確的答案時,以下代碼將刪除臨時數組中的問題和答案,並保留原始數據。

tempQuestions.splice(randomQuestion,1) 
    tempAnswers.splice(selectedAnswer, 1); 

當按下第二時間按鈕,經過「遊戲」是完整的,則臨時數組失敗即使我執行相同的代碼以重新填充。

任何想法爲什麼上面的代碼不能在第二次運行?

編輯

jsfiddle

+0

「無法重新填充」的含義是什麼? – Oriol

+1

你可以在這裏發佈演示http://jsfiddle.net? – elclanrs

+0

臨時數組不會與其他內容重新填充。 – tonyedwardspz

回答

1

您正在創建一個新的參考同一個數組,所以當你修改臨時瓦爾你還可以修改被選擇瓦爾引用的對象。你需要複製數組。一個好方法是將你自己的copy()原型方法添加到Array對象。

淺表副本應該做的:

Array.prototype.copy = function(){ 
    return this.slice(0); 
} 

如果你需要一個深拷貝

Array.prototype.copy = function(){ 
    return JSON.parse(JSON.stringify(this)); 
} 

使用方法如下:

if(setSelection == 0){ 
    tempQuestions = chosenQuestion.copy(); 
    tempAnswers = chosenAnswer.copy(); 
} 
+0

完美,謝謝。 – tonyedwardspz

0

使用.slice工作。

tempQuestions = chosenQuestion.slice(); 

切片()操作克隆的數組,並返回參考原始。