2013-06-24 106 views
0

因此,考慮下面的代碼我的預期行爲將是
奇怪行爲設置陣列

console.log(charts[i-1]['yaxes'][0]['min']);   
options[chart_number]['yaxes'][0]['min'] = charts[i]['yaxes'][0]['min']; 
console.log(charts[i-1]['yaxes'][0]['min']); 

輸出一定的價值,在這種情況下:1356.6
設置選項[chart_number] [ 'yaxes'] [0] [ 「分鐘」]等於另一個值,在這種情況下0
輸出相同的值在第1行預期:1356.6

而不是我的第三行輸出爲0,導致我相信,前行IS負責改變這個數組值。

任何人都有任何想法,爲什麼設置選項的子值等於來自不同數組的值是否也在更改源數組?

更新:

將其更改爲

console.log(charts[i-1]['yaxes'][0]['min']);   
options[chart_number]['yaxes'][0]['min'] = charts[i]['yaxes'].slice(0)[0]['min']; 
console.log(charts[i-1]['yaxes'][0]['min']); 

不會出現有過一次幫助。我的代碼庫可能太長,無法粘貼在這裏,可能會涉及到挖掘一段時間來幫助我,但感謝您的建議,如果潛在的探索途徑。

更新2:
演示完整的問題在這裏:http://jsfiddle.net/SxW3X/

添加數據集,如 「失業」,打RSI,移動RSI到第二個圖表,圖表1保持新的分集,通過上面的代碼。

+0

也許'chart_number'和'i-1'是一樣的嗎? –

+0

代碼中的第二行不會改變'charts [i-1] ['yaxes'] [0] ['min']'的值。請張貼更多你的代碼。 –

回答

0

在JavaScript中,所有非原始值默認都是通過引用傳遞的,所以您應該查看構建選項和圖表數組的位置,如果可能的話使用Array slice method,如果要複製數組等非原始類型。

+0

如果我將對象推到圖表[]上,我可能會遇到此問題嗎?這是我唯一接觸它的時間。 我在印象之下jquery push創建了一個新對象,它只是傳遞一個引用? –

+0

JavaScript的默認行爲是通過引用,所以是的,情況就是這樣。看到這個問題的最佳答案http://stackoverflow.com/questions/122102/most-efficient-way-to-clone-an-object,嘗試一個淺拷貝。並注意,通過引用來提高性能,您可以設計您的應用程序,並牢記這一原則。 –

+1

小心,術語「通過參考」是一個明確定義的術語,用於特定的參數傳遞方式。 JavaScript是**不**通過引用,它是通過值。在對象的情況下,該值*是*引用,但不是通過引用傳遞。請參閱http://en.wikipedia.org/wiki/Evaluation_strategy和http://stackoverflow.com/q/518000/218196。 –