0

我們有變量「a」,我們想創建變量「b」作爲「a」變量的鏡像,然後更改其中的一個元素。Google應用腳本:新變量保留源變量的引用

代碼

function h(){ 
var a=[[1,2,3]] 
var b=a; 
b[0][0]="test" 
Logger.log(b) 
Logger.log(a) 
} 

輸出

[[test,2,3]] 
[[test,2,3]] 

這究竟是爲什麼?任何方式來避免這種情況?

回答

1

這referes另一個問題:

Copying array by value in JavaScript

您可以測試一些建議的解決方案。我測試過這樣的回答:

https://stackoverflow.com/a/23245968/5372400

代碼:

function h(){ 
    var a=[[1,2,3]]; 
    var b = JSON.parse(JSON.stringify(a)); 
    b[0][0]="test"; 
    Logger.log(b); 
    Logger.log(a); 
} 

結果是

[[test, 2, 3]] 
[[1.0, 2.0, 3.0] 

的樣子,像javascriptc沒有做數組賦值。

+0

我用你的建議做了一個功能,並在我的項目隨處可見流利工作。萬分感謝。 –

0

你必須在數組b深層副本值爲此可以使用切片方法:

ARR2 = arr1.slice();

下面是你的代碼有一些修改:

function h(){ 
var a=[1,2,3]; 
var b= a.slice(); 
b[0]="test"; 
console.log(b); 
console.log(a); 
} 
+0

謝謝,但正如我使用數組和對象Max的解決方案效果更好。 –