如何修改Google Apps Script函数,仅依据首列移除重复行?
修改方案:仅按第一列去重的表格行移除函数
原代码通过对比整行内容判断重复,要实现仅检查第一列值来移除重复行,只需做以下关键修改:
修改后的完整代码
function removerDuplicata() { var sheet = SpreadsheetApp.getActiveSheet(); var intervalo = sheet.getRange("A2:H") var data = intervalo.getValues(); var novaData = new Array(); // 用Set记录已出现的第一列值,提升去重效率 var seenFirstColumn = new Set(); for(i in data){ var row = data[i]; // 跳过第一列为空的行(可选,避免无效处理) if (!row[0]) continue; var duplicata = false; // 仅判断第一列值是否重复 if (seenFirstColumn.has(row[0])) { duplicata = true; } if(!duplicata){ novaData.push(row); seenFirstColumn.add(row[0]); } } intervalo.clearContent(); sheet.getRange(2, 1, novaData.length, novaData[0].length).setValues(novaData); }
具体修改说明
- 替换重复判断逻辑:原代码用
row.join() == novaData[j].join()对比整行内容,现在改为检查第一列值是否已存在于seenFirstColumn集合中,既精准匹配需求,又比嵌套循环效率更高。 - 新增去重记录集合:添加
seenFirstColumn变量(Set类型),存储已处理过的第一列值,避免重复遍历novaData数组,提升大数据量下的运行速度。 - 可选优化:跳过空行:增加
if (!row[0]) continue;,可直接跳过第一列无内容的行,减少无效处理。
如果要沿用原代码的嵌套循环逻辑,仅需修改判断条件即可:
// 原嵌套循环部分替换为: for(j in novaData){ // 仅对比第一列值 if(row[0] == novaData[j][0]){ duplicata = true; } }
不过这种嵌套循环在数据量较大时效率偏低,更推荐使用Set的优化版本。
内容的提问来源于stack exchange,提问作者voidalzk
相关产品推荐
相关产品推荐

