此示例表中有4个重复项(第2-5行):https://docs.google.com/spreadsheets/d/1CMR9TjtxIGF7QDFBEMBSbAcd71neSjteINvmeuvZ3lo/edit#gid=0
我只想比较column B
(Link
)删除,但是此脚本比较一行中的所有单元格
function removeDuplicates() {
const sheet = SpreadsheetApp.getActive().getSheetByName('Combined');
const data = sheet.getDataRange().getValues();
const numRows = data.length;
const newData = [];
const seen = {};
for (var i = 0, row, key; i < numRows && (row = data[i]); i++) {
key = JSON.stringify(row);
if (key in seen) {
continue;
}
seen[key] = true;
newData.push(row);
}
sheet.clearContents();
sheet.getRange(1, 1, newData.length, newData[0].length).setValues(newData);
}
我怎样才能比较column B
来删除重复对象,而又不会在写回工作表时丢失信息呢?
答案 0 :(得分:2)
如果我的理解是正确的,那么该修改如何?请认为这只是几个答案之一。
修改脚本后,如何进行修改?
从:for (var i = 0, row, key; i < numRows && (row = data[i]); i++) {
key = JSON.stringify(row);
if (key in seen) {
continue;
}
seen[key] = true;
newData.push(row);
}
至:
for (var i = 0, row, key; i < numRows && (row = data[i][1]); i++) { // Modified
if (row in seen) { // Modified
continue;
}
seen[row] = true; // Modified
newData.push(data[i]); // Modified
}
与其他模式一样,修改后的脚本又如何呢?
function removeDuplicates_modified() {
const sheet = SpreadsheetApp.getActive().getSheetByName('Combined');
const data = sheet.getDataRange().getValues();
var temp = {}; // Added
var newData = data.reduce(function(ar, e) { // Added
if (!temp[e[1]]) {
ar.push(e);
temp[e[1]] = e[1];
}
return ar;
}, []);
sheet.clearContents();
sheet.getRange(1, 1, newData.length, newData[0].length).setValues(newData);
}
如果我误解了您的问题,而这不是您想要的结果,我深表歉意。
修改脚本后,我注意到了更简单的修改。请检查以下修改。
从:key = JSON.stringify(row);
至:
key = row[1];
使用filter
时,此修改如何?
function removeDuplicates_modified() {
const sheet = SpreadsheetApp.getActive().getSheetByName('Combined');
const data = sheet.getDataRange().getValues();
var temp = {}; // Added
var newData = data.filter(function(e) { // Added
if (!temp[e[1]]) {
temp[e[1]] = e[1];
return true;
}
return false;
});
sheet.clearContents();
sheet.getRange(1, 1, newData.length, newData[0].length).setValues(newData);
}