Google Scripts数组处理求助:将指定范围数据转为目标结构数组
解决Google Script中数组分组的问题
嘿,我明白你想要把表格里相同名称对应的值分组到一个数组里的需求啦!首先得纠正一下你描述的目标数组结构的小问题——如果array[0]是字符串name1,那它没法再拥有array[0][0]这样的下标,所以正确的目标结构应该是每个子数组的第一个元素是名称,后面跟着对应的所有值,也就是:
array = [ ["name1", "value1", "value2"], ["name2", "value3", "value4"] ]
下面是完整的可运行代码,我会一步步给你解释:
var ss = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Arkusz1"); var range = ss.getRange("A1:B4").getValues(); var groupedObj = {}; // 用对象来临时存储分组数据 // 遍历数据,跳过表头(因为第一行是列名) for (var i = 1; i < range.length; i++) { var name = range[i][0]; var value = range[i][1]; // 如果这个名称还没在对象里,就初始化一个数组,第一个元素是名称 if (!groupedObj[name]) { groupedObj[name] = [name]; } // 把对应的值添加到这个名称的数组里 groupedObj[name].push(value); } // 把对象转换成我们需要的数组结构 var array = Object.values(groupedObj); // 可以打印出来看看结果 console.log(array);
代码解释:
- 临时对象
groupedObj:用名称作为key,这样可以快速判断某个名称是否已经被处理过,避免重复创建数组。 - 循环遍历数据:从
i=1开始是因为第一行是表头(Column A和Column B),不需要处理。如果你的表格没有表头(A1直接是name1),把循环起始i改成0就行。 - 初始化分组数组:当第一次遇到某个名称时,创建一个新数组,第一个元素就是这个名称。
- 添加值到数组:每次遇到相同名称,就把对应的值push到该名称的数组里。
- 转换为目标数组:用
Object.values(groupedObj)把对象的所有值提取出来,就得到了我们想要的二维数组结构。
内容的提问来源于stack exchange,提问作者Kramar
相关产品推荐
相关产品推荐

