Как объединить несколько массивов 2d с разной длиной в один большой массив, чтобы отобразить его в таблицах Google? - PullRequest
1 голос
/ 16 июня 2020

Я работаю с разными 2-мерными массивами (строки и столбцы, скрипт приложения Google). Например (r = row, c = column):

var array1 = 
[[r1c1, r1c2, r1c3], 
 [r2c1, r2,c2, r2c2]]

var array2 = 
[[r1c4, r1c5], 
[r2c4, r2c5], 
[r3c4, r3c5]]

, и я хочу, чтобы это было так:

var array1and2 = 
[[r1c1, r1c2, r1c3, r1c4, r1c5], 
 [r2c1, r2c2, r2c3, r2c4, r2c5], 
 [empty, empty, empty, r3c4, r4c5]
]

Он не должен быть пустым, но как уже было сказано, я хочу отобразить его в таблицах Google. Второй массив должен находиться в первой пустой строке и столбце рядом с первым массивом.
Надеюсь, это понятно, и большое вам спасибо за помощь!

Ответы [ 3 ]

5 голосов
/ 16 июня 2020

Что-то вроде этого вы можете сделать:

var array2 = [['r1c4', 'r1c5'],
['r2c4', 'r2c5'],
['r3c4', 'r3c5']];

var array1 = [['r1c1', 'r1c2', 'r1c3'],
['r2c1', 'r2,c2', 'r2c2']];

var result = array2.map((elem, i)=>[...(array1[i] || new Array(array1[0].length).fill('empty')), ...elem]);

console.log(result);
0 голосов
/ 16 июня 2020

Менее ортодоксальный подход:

function merge2Arrays() {
  var array1 = [['r1c1', 'r1c2', 'r1c3'],['r2c1', 'r2,c2', 'r2c3']];
  var array2 = [['r1c4', 'r1c5'],['r2c4', 'r2c5'],['r3c4', 'r3c5']];
  const ss=SpreadsheetApp.getActive();
  const sh=ss.insertSheet('xxxxx');
  sh.getRange(1,1,array1.length,array1[0].length).setValues(array1);
  sh.getRange(1,array1[0].length+1,array2.length,array2[0].length).setValues(array2);
  const a=sh.getDataRange().getValues();
  ss.deleteSheet(sh);
  ret a;
}

function merge3Arrays() {
  var array1 = [['r1c1', 'r1c2', 'r1c3'],['r2c1', 'r2,c2', 'r2c3']];
  var array2 = [['r1c4', 'r1c5'],['r2c4', 'r2c5'],['r3c4', 'r3c5']];
  var array3 = [["r1C6"],["r2c6"],["r3c6"],["r4c6"],["r5c6"],["r6c6"]];
  const ss=SpreadsheetApp.getActive();
  const sh=ss.insertSheet('xxxxx');
  sh.getRange(1,1,array1.length,array1[0].length).setValues(array1);
  sh.getRange(1,array1[0].length+1,array2.length,array2[0].length).setValues(array2);
  sh.getRange(1,array1[0].length + array2[0].length + 1,array3.length,array3[0].length).setValues(array3);
  const a=sh.getDataRange().getValues();
  ss.deleteSheet(sh);
  SpreadsheetApp.getUi().showModelessDialog(HtmlService.createHtmlOutput(JSON.stringify(a)), "Display Array");
}
0 голосов
/ 16 июня 2020

Я читаю ваш вопрос не только о том, как создать объединенный массив, но и о том, как манипулировать данными на месте, поэтому я бы подошел к нему примерно так (при условии, что массив 1 живет на листе 1, а массив 2 живет на листе 2:

function translateArray(){
var sh = SpreadsheetApp.getActiveSpreadsheet();
var ss = sh.getSheetByName("Sheet1");
var os = sh.getSheetByName("Sheet2");
var range1 = ss.getRange("A1:C2");//2 rows 3 columns
var range1Width = range1.getValues()[0].length;//checks length of first row - the width
var range2 = os.getRange("A1:B3");//3 rows 2 columns
var data = range2.getValues();

ss.getRange(1,range1Width,data.length, data[0].length).setValues(data);

}

Этот код копирует данные с листа 2 на лист 1.

используйте [1] вместо [0] в range1Width, если данные заголовка шире, чем реальные данные.

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