【发布时间】:2019-12-09 13:26:54
【问题描述】:
我将谷歌表设置为我的树莓派的数据库,以发送温度、湿度等读数。这样做很好,但是由于某种原因,谷歌表会在同一张表中创建重复的巨大数据数组。
为了解决这个问题,我一直在使用我找到的标准 removeDuplicates google 脚本代码(见下文)。这样做的问题是,有时谷歌表格会复制超过 100,000 行数据以复制几次。这意味着脚本有很多重复项需要整理。
我已经读到,问题可能出在太多重复项上,必须单独编写以对每个重复项进行排序可能会花费太长时间,我应该尝试一次性获取所有重复项的列表,然后执行所有一次性删除重复项。现在我对此比较陌生,所以我不确定如何实现这一点。
function removeDuplicates() {
// [START apps_script_sheets_sheet]
var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
var sheet = spreadsheet.getSheetByName('RawData');
var data = sheet.getDataRange().getValues();
// [END apps_script_sheets_sheet]
// [START apps_script_sheets_new_data]
var newData = [];
// [END apps_script_sheets_new_data]
for (var i in data) {
var row = data[i];
var duplicate = false;
for (var j in newData) {
if (row.join() == newData[j].join()) {
duplicate = true;
}
}
// [START apps_script_sheets_duplicate]
if (!duplicate) {
newData.push(row);
}
// [END apps_script_sheets_duplicate]
}
// [START apps_script_sheets_clear]
sheet.clearContents();
sheet.getRange(1, 1, newData.length, newData[0].length).setValues(newData);
// [END apps_script_sheets_clear]
}
// [END apps_script_sheets_remove_duplicates]
唯一的错误是代码没有在分配的 6 分钟内完成。
我该如何解决这个问题?
【问题讨论】:
-
这看起来像是XY Problem——理想情况下,我们可以避免在第一时间创建重复项,而不是在事后尝试删除十万行。我建议为创建重复条目的脚本发布一个单独的问题,并首先尝试防止这种行为。
标签: javascript performance google-sheets duplicates