如何在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
相关产品推荐
相关产品推荐

