Javascript 在Google应用程序脚本中使用.splice()时出现问题

Javascript 在Google应用程序脚本中使用.splice()时出现问题,javascript,arrays,google-apps-script,Javascript,Arrays,Google Apps Script,我正在尝试使用Google应用程序脚本中的splice提取2D数组的子集。A是输入数组,从中创建两个数组info[]和ttdata[]。代码如下: function SpliceTest() { var A = [[1,2,3,4,5,6],[1,2,3,4,5,6],[1,2,3,4,5,6], ["","","","1","",""],["","","","","2",""]] Logger.log(A) var spliced = SpliceData(A)

我正在尝试使用Google应用程序脚本中的splice提取2D数组的子集。A是输入数组,从中创建两个数组info[]和ttdata[]。代码如下:

function SpliceTest()
{
  var A = [[1,2,3,4,5,6],[1,2,3,4,5,6],[1,2,3,4,5,6], 
  ["","","","1","",""],["","","","","2",""]]
  Logger.log(A)      
   var spliced = SpliceData(A)
  Logger.log(A)
}

function SpliceData(data)
{
  var info = []
  var ttdata = []
  for(var j = 0; j < 2; j++)
   {
     info[j] = data[j].splice(4, 2)
  }
  for(var j = 2; j < data.length; j++)
  {
     ttdata[j-2] = data[j].splice(0, 4)
   }
   return [info, ttdata]
 }

就像Tehhowch在评论中提到的那样,你需要的不是

此外,如果仔细阅读文档,您会注意到splice修改了原始阵列,slice生成了它的浅拷贝。 功能拼接测试 { var记录器=控制台 变量A=[[1,2,3,4,5,6],[1,2,3,4,5,6],[1,2,3,4,5,6], [,,,1,,],[,,,,2,]] 变量拼接=拼接数据A Logger.log拼接阵列: 对数拼接 Logger.logOriginal数组A: logA.logA } 函数数据 { var info=[] 变量ttdata=[] forvar j=0;j<2;j++ { 信息[j]=数据[j].4 } forvar j=2;j你不明白什么?预期的输出是什么?可能是指切片而不是拼接。剪接明确意味着从一个地方移植到另一个地方,例如基因剪接。我希望提取A的2个子集,并将它们放入数组info[]和ttdata[]。这部分我做到了,但我也需要原来的A,现在已经丢失了。我不明白这部分为什么要修改A。为什么不在开始之前复制数组A。我也试过复制数组。但在执行splice子例程后,副本也会被修改。看起来slice也会修改数组。事先复制也没有帮助。我正在运行上面的代码片段,它不会修改数组a。还要注意splice和slice之间语法的细微变化@Partha读到了浅拷贝和深拷贝的区别。@JackBrown,Tehhowch,使用slice解决了这个问题。谢谢你的帮助。
[19-01-25 11:28:05:493 CET] [[1.0, 2.0, 3.0, 4.0, 5.0, 6.0], [1.0, 2.0, 3.0, 4.0, 5.0, 6.0], [1.0, 2.0, 3.0, 4.0, 5.0, 6.0], [, , , 1, , ], [, , , , 2, ]]
[19-01-25 11:28:05:494 CET] [[1.0, 2.0, 3.0, 4.0], [1.0, 2.0, 3.0, 4.0], [5.0, 6.0], [, ], [2, ]]