我在Google电子表格上有两个列表:“现有公司”和“新公司”。 我想将两者进行比较,找出“现有公司”中不存在“新公司”中的哪些唯一条目,获取这些条目并从“新公司”中删除所有其他条目。
我已经编写了以下脚本:
function grabNewCompanies() {
// grab existing companies list from sheet into an array
var sh = SpreadsheetApp.openById("sheetID").getSheetByName("sheetName")
var row = sh.getDataRange().getLastRow()
var existingCompanies = sh.getRange(2,1,row - 1,1).getValues()
Logger.log(existingCompanies)
//grab new companies added
var sh = SpreadsheetApp.openById("sheetID").getSheetByName("sheetName")
var row = sh.getDataRange().getLastRow()
var newCompanies = sh.getRange(2,4,row - 1, 1).getValues()
Logger.log(newCompanies)
var array = [];
for(i=0; i<newCompanies.length; i++) {
for(j=0; j<existingCompanies.length; j++) {
if(newCompanies[i][0] !== existingCompanies[j][0]) {
array.push([newCompanies[i][0]]);
}
Logger.log(array)
}
我已经运行了该脚本,但是失败了。
正确返回了两个数组(existingCompanies
和newCompanies
)。
但是,两者之间的比较似乎不起作用:它总是返回newCompanies
数组的第一个元素,无论它是否存在于existingCompanies
中。
此外,如果array
包含多个newCompanies
中不存在的条目,我不确定如何确保推入existingCompanies
的值不重复。
谢谢。
答案 0 :(得分:1)
您要检索existingCompanies
和newCompanies
之间的差异元素。如果我对您的问题的理解是正确的,那么此修改如何?我认为针对您的情况有几种解决方案。因此,请将此视为其中之一。
newCompanies
中选取一个元素,并检查该元素是否包含在existingCompanies
中。existingCompanies
中,则将该元素推入array
。在此修改中,我使用true
和false
进行了检查。重复此流程,直到检查newCompanies
中的所有元素为止。
修改脚本后,如何处理?
从:var array = [];
for(i=0; i<newCompanies.length; i++) {
for(j=0; j<existingCompanies.length; j++) {
if(newCompanies[i][0] !== existingCompanies[j][0]) {
array.push([newCompanies[i][0]]);
}
}
}
至:
var array = [];
for(i=0; i<newCompanies.length; i++) {
var temp = false; // Added
for(j=0; j<existingCompanies.length; j++) {
if(newCompanies[i][0] === existingCompanies[j][0]) { // Modified
temp = true; // Added
break; // Added
}
}
if (!temp) array.push([newCompanies[i][0]]); // Modified
}
Logger.log(array)
与其他模式一样,以下两个示例如何?这些脚本的处理成本低于使用for循环的脚本。
var array = newCompanies.filter(function(e) {return existingCompanies.filter(function(f) {return f[0] == e[0]}).length == 0});
Logger.log(array)
或
var array = newCompanies.filter(function(e) {return !existingCompanies.some(function(f) {return f[0] == e[0]})});
Logger.log(array)
如果我误解了您的问题,请告诉我。我想修改它。