Как отключить таблицу с помощью Google Apps Script? - PullRequest
1 голос
/ 04 марта 2020

У меня есть таблица в электронной таблице, которую я хочу отключить с помощью скрипта приложений Google: каждая из строк месяца в исходной таблице должна стать несколькими строками в новой таблице. Проблема в том, что код не приводит к ожидаемому результату.

Выполняется создание массивов, которые заканчиваются следующим образом (каждая строка таблицы заканчивается одним разным месяцем):

[[...,'April'],[...,'September'],[...,'December']]

Это производя это (каждая строка заканчивается значением последнего месяца этой строки в исходной таблице):

[[...,'December'],[...,'December'],[...,'December']]

Может кто-то увидеть ошибку?

function myFunction() {
  var ay_datos = [
    ['State', 'Month1', 'Month2', 'Month3', 'Number of months', 'Month'],
    ['California', 'April', 'September', 'December', 3, ''],
    ['Texas', 'January', 'March', '', 2, ''],
  ];
  var ay_new = [
    ['State', 'Month1', 'Month2', 'Month3', 'Number of months', 'Month'],
  ];

  for (i = 1; i < ay_datos.length; i++) {
    var num_months = ay_datos[i][4];
    var ay_linea = ay_datos[i];

    for (j = 0; j < num_months; j++) {
      ay_linea[5] = ay_linea[1 + j];
      ay_new.push(ay_linea);
    }
  }
}

1 Ответ

2 голосов
/ 05 марта 2020

Вы нажимаете один и тот же массив каждый раз в al oop. Любые изменения, сделанные в массиве, отражаются на всех ссылках одного и того же массива. Используйте slice для копирования массива:

  ay_linea[5] = ay_linea[1 + j];
  ay_new.push(ay_linea.slice(0));

Живой фрагмент:

function myFunction() {
  const ay_datos = [
    ['State', 'Month1', 'Month2', 'Month3', 'Number of months', 'Month'],
    ['California', 'April', 'September', 'December', 3, ''],
    ['Texas', 'January', 'March', '', 2, ''],
  ];
  const ay_new = [
    ['State', 'Month1', 'Month2', 'Month3', 'Number of months', 'Month'],
  ];

  for (let i = 1; i < ay_datos.length; i++) {
    const num_months = ay_datos[i][4];
    const ay_linea = ay_datos[i];

    for (let j = 0; j < num_months; j++) {
      ay_linea[5] = ay_linea[1 + j];
      ay_new.push(ay_linea.slice(0));
    }
  }
  return ay_new;
}
console.log(myFunction());
...