我們有變量「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]]
這究竟是爲什麼?任何方式來避免這種情況?
我們有變量「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]]
這究竟是爲什麼?任何方式來避免這種情況?
這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]
的樣子,像javascript
c
沒有做數組賦值。
你必須在數組b深層副本值爲此可以使用切片方法:
ARR2 = arr1.slice();
下面是你的代碼有一些修改:
function h(){
var a=[1,2,3];
var b= a.slice();
b[0]="test";
console.log(b);
console.log(a);
}
謝謝,但正如我使用數組和對象Max的解決方案效果更好。 –
我用你的建議做了一個功能,並在我的項目隨處可見流利工作。萬分感謝。 –