Проблема с использованием .splice () в Google App Script - PullRequest
0 голосов
/ 25 января 2019

Я пытаюсь извлечь подмножества 2D-массива, используя соединение в Google App Script. 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]
 }

Проблема в том, что при выполнении функции spliceData изменяется входной массив A, который я не могу понять.

Ниже приведены значения A до и после выполнения процедуры SpliceData.

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

1 Ответ

0 голосов
/ 25 января 2019

Здесь, как сказал Tehhowch в комментарии, вам нужно было slice() вместо splice()

Кроме того, если вы просматриваете документациювы заметите, что сплайс изменяет исходный массив, а срез делает его поверхностную копию.

function SpliceTest()
{
  var Logger = console
  var A = [[1,2,3,4,5,6],[1,2,3,4,5,6],[1,2,3,4,5,6], 
  ["","","","1","",""],["","","","","2",""]]

   var spliced = SpliceData(A)
  Logger.log("Spliced Array:")
  Logger.log(spliced)
  Logger.log("Original Array A:")
  Logger.log(A)
}

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

Примечание. Я изменил код, т.е. var Logger = console, чтобы он мог работать здесь как фрагмент кода!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...