这是一个操作我遇到问题的数组的函数:
function playWithArrays2()
{
var OneDimArray = [];
var TwoDimArray = [];
OneDimArray.push('Row 0,Value 0');
OneDimArray.push('Row 0,Value 1');
OneDimArray.push('Row 0,Value 2');
TwoDimArray.push(OneDimArray);
OneDimArray = [];
OneDimArray.push('Row 1,Value 0');
OneDimArray.push('Row 1,Value 1');
OneDimArray.push('Row 1,Value 2');
TwoDimArray.push(OneDimArray);
var HoldArray = TwoDimArray[0];
HoldArray[0] = "New Value";
TwoDimArray.push(HoldArray);
Logger.log(TwoDimArray);
}
我试图将一行二维数组复制到单行数组,修改单行数组中的一列,然后将其推送到二维数组。这是日志的输出:
[17-12-25 21:55:16:660 EST] [[新值,行0,值1,行0,值2],[行1,值0,行1,值1,行1,值2],[新值,行0,值1,行0,值2]]
正如您所见,推送工作正常:创建第3个更改的行。问题是第一行也被改变了。这是分配给1维数组的行。
我不想改变第一排。这就是问题所在。
答案 0 :(得分:0)
javascript中的数组也是对象,变量保存对象的引用,而不是对象本身。在您的情况var HoldArray = TwoDimArray[0];
中,HoldArray
引用了TwoDimArray
的0行,您正在修改此引用中的值,这就是为什么它会影响这两个位置的值两个值都有相同的参考。
您可以使用array#slice
var HoldArray = TwoDimArray[0].slice(0);
var OneDimArray = [];
var TwoDimArray = [];
OneDimArray.push('Row 0,Value 0');
OneDimArray.push('Row 0,Value 1');
OneDimArray.push('Row 0,Value 2');
TwoDimArray.push(OneDimArray);
OneDimArray = [];
OneDimArray.push('Row 1,Value 0');
OneDimArray.push('Row 1,Value 1');
OneDimArray.push('Row 1,Value 2');
TwoDimArray.push(OneDimArray);
var HoldArray = TwoDimArray[0].slice(0);
HoldArray[0] = "New Value";
TwoDimArray.push(HoldArray);
console.log(TwoDimArray);