Google应用脚本:新变量保留源变量的引用

时间:2017-04-11 11:53:23

标签: variables google-apps-script reference google-sheets

我们有变量“a”,我们想要创建变量“b”作为“a”变量的镜像,然后更改其中一个元素。

代码

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]]

为什么会这样?有什么方法可以避免这种情况吗?

2 个答案:

答案 0 :(得分:1)

这引出了另一个问题:

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不进行数组分配。

答案 1 :(得分: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);
}