Возврат 2D-массива из скрипта Google Apps - PullRequest
0 голосов
/ 13 декабря 2018

Я пытаюсь разбить длинный массив на несколько столбцов (2D) в моих Google Sheets.Вот моя функция ниже:

function SPLITARR(data, colNum) {
  if (colNum <= 1) {
    return data;
  }

  var res = [];
  var col = [];
  var i = 0;

  data.forEach(function(el) {
    if (i >= colNum) {
      res.push(col);
      col = [];
      i = 0;
    }

    col.push(el);
    i++;
  });

  res.push(col);
  Logger.log(res); // Debugging purposes.
  return res;
}

Отправка следующих тестовых данных:

var test = ['alex', 'alecia', 'conrad', 'keenan', 'Beebo', 'jacques', 'jeremy', 'susan', 'jay']
SPLITARR(test, 2);

Результат, который регистрируется, кажется правильным:

[[alex, alecia], [conrad, keenan], [Beebo, jacques], [jeremy, susan], [jay]]

Но в Googleлисты, ничего не показывает.Формула не отображает ошибок и заполняет ожидаемое количество ячеек, но заполняет их ничем.101

Существует ли определенный формат, которому необходимо придерживаться 2D-массивов для правильного отображения?

Ответы [ 2 ]

0 голосов
/ 15 декабря 2018

Проблема:

D18:D23 не похожа на test (['alex', 'alecia', 'conrad', 'keenan', 'Beebo', 'jacques', 'jeremy', 'susan', 'jay']).Это двумерный массив.Это выглядит так: [[D18],[D19],[D20],[D21],[D22],[D23]]

Решение:

Используйте методы массива, такие как reduce(), concat() и push(), чтобы сформировать массив в желаемый формат.

Пример кода (для нескольких строк в одном столбце):

function SPLITARR(rowData, numberOfCol) {
  return rowData.reduce(function(acc, curr, idx) {
    idx % numberOfCol === 0
      ? acc.push(curr)
      : (acc[acc.length - 1] = acc[acc.length - 1].concat(curr));
    return acc;
  }, []);
}

Ссылки:

0 голосов
/ 15 декабря 2018

Попробуйте этот код, как уже упоминалось в комментариях, у вас должен быть прямоугольный шаблон для вашего 2D-массива, поэтому вы не можете иметь [jay] в качестве последнего элемента, также обратите внимание, что у вас не должно быть имен без кавычек -вместо [alex,alecia] это должно быть ['alex','alecia']:

function arraytoarray2d() {
var array2d = [];
var arrayx = ['alex', 'alecia', 'conrad', 'keenan', 'Beebo', 'jacques', 'jeremy', 'susan', 'jay']
for (var i in arrayx) {
  if (i % 2 == 0 || i == 0) {
var first = arrayx[i];
var second = arrayx[++i];
if(!second) second = ''; 
array2d.push([first,second]);
}}
}

Выводит это:

enter image description here

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