You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Google Apps Script中转数组字符串为变量并拼接数据集

Google Apps Script中通过字符串获取变量并拼接数据集的解决方案

问题描述

我要找出最大的数据集并完成拼接,目前正在按长度对数据集排序。现在需要将字符串转换为对应的变量名,这样才能遍历各个数据集完成拼接。我知道在JavaScript里可以用window[]实现,但在Google Apps Script(GAS)里该怎么操作?

原尝试代码

function concatenateData() {
  let dataSizes = [];

  //Separated datasets
  let finalFabricData = [
    ["A", "C", 3],
    ["S", "R", 4],
    ["C", "O", 3]
  ];
  dataSizes.push('finalFabricData', finalFabricData.length);

  let finalDecorationData = [
    ["T", "D", 3],
    ["F", "F", 4],
    ["G", "O", 3]
  ];;
  dataSizes.push('finalDecorationData', finalDecorationData.length)

  let finalHtData = [
    ["A", "C", 3],
    ["S", "R", 4],
    ["K", "O", 3]
  ];
  dataSizes.push('finalHtData', finalHtData.length);

  let finalOrderData = [
    ["Z", "C", 3]
  ];
  dataSizes.push('finalOrderData', finalOrderData.length);

  //Attempt to grab the variable names, but they come as strings
  let data1 = dataSizes[0][0];
  let data2 = dataSizes[1][0];
  let data3 = dataSizes[2][0];
  let data4 = dataSizes[3][0];

  //Attempt to concatenate them, but data1 is not iterable
  let finalDataset = [];
  data1.forEach(function(row, i) {
    row = row.concat(data2[i], data3[i], data4[i]);
    finalDataset.push(row)
  });
}

预期结果

let res = [
  ["A", "C", 3, "T", "D", 3, "A", "C", 3, "Z", "C", 3],
  ["S", "R", 4, "F", "F", 4, "S", "R", 4, "", "", ""],
  ["C", "O", 3, "G", "O", 3, "K", "O", 3, "", "", ""]
];

解决方案

GAS中没有浏览器环境的window对象,所以不能用window[]的方式。更高效且易维护的做法是直接统一管理数据集,而非单独存储变量名字符串。以下是两种实现方式:

推荐方式:统一管理数据集(简洁易维护)

直接将所有数据集放入一个数组,后续遍历处理即可,完全不需要通过字符串获取变量:

function concatenateData() {
  // 统一存储所有数据集
  const datasets = [
    [["A", "C", 3], ["S", "R", 4], ["C", "O", 3]],
    [["T", "D", 3], ["F", "F", 4], ["G", "O", 3]],
    [["A", "C", 3], ["S", "R", 4], ["K", "O", 3]],
    [["Z", "C", 3]]
  ];

  // 获取最长数据集的行数,作为最终结果的总行数
  const maxRows = Math.max(...datasets.map(ds => ds.length));
  const finalDataset = [];

  // 逐行拼接所有数据集的内容
  for (let i = 0; i < maxRows; i++) {
    let combinedRow = [];
    datasets.forEach(ds => {
      // 若当前数据集无第i行,补对应列数的空字符串
      const targetRow = ds[i] || Array(ds[0].length).fill("");
      combinedRow = combinedRow.concat(targetRow);
    });
    finalDataset.push(combinedRow);
  }

  console.log(finalDataset);
  return finalDataset;
}

备选方式:通过字符串获取变量(不推荐,仅作参考)

如果一定要通过变量名字符串获取对应数据集,可利用this对象(仅适用于全局变量或函数内可通过this访问的变量):

function concatenateData() {
  let dataSizes = [];

  let finalFabricData = [["A", "C", 3], ["S", "R", 4], ["C", "O", 3]];
  dataSizes.push({name: 'finalFabricData', length: finalFabricData.length});

  let finalDecorationData = [["T", "D", 3], ["F", "F", 4], ["G", "O", 3]];
  dataSizes.push({name: 'finalDecorationData', length: finalDecorationData.length});

  let finalHtData = [["A", "C", 3], ["S", "R", 4], ["K", "O", 3]];
  dataSizes.push({name: 'finalHtData', length: finalHtData.length});

  let finalOrderData = [["Z", "C", 3]];
  dataSizes.push({name: 'finalOrderData', length: finalOrderData.length});

  // 通过this[变量名]获取对应数据集
  const datasets = dataSizes.map(item => this[item.name]);
  const maxRows = Math.max(...dataSizes.map(item => item.length));
  const finalDataset = [];

  for (let i = 0; i < maxRows; i++) {
    let combinedRow = [];
    datasets.forEach(ds => {
      const targetRow = ds[i] || Array(ds[0].length).fill("");
      combinedRow = combinedRow.concat(targetRow);
    });
    finalDataset.push(combinedRow);
  }

  console.log(finalDataset);
  return finalDataset;
}

内容的提问来源于stack exchange,提问作者onit

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 19:31:03