在此电子表格中,包含工作表RemoveRecords
和KeywordsList
我想通过应用程序脚本KeywordsList
搜索ArticleLink
列来删除不在工作表中的记录。
我正在考虑将这一点作为起点(这行不通):
var ss = SpreadsheetApp.getActiveSpreadsheet();
var rsheet = ss.getSheetByName("RemoveRecords");
var ksheet = ss.getSheetByName("KeywordsList");
var records = rsheet.getDataRange().getValues();
var keywords = ksheet.getDataRange().getValues();
for( var i=records.length - 1; i>=0; i--){
for( var j=0; j<keywords.length; j++){
if(records[i] && (records[i][1].DoesntContain(keywords[j]))){
records.splice(i, 1);
}
}
}
如何从另一个数组中删除不包含字符串的数组?
更新我认为这可能是方法,但看起来它正在寻找完全匹配:
var filtered = ['ac', 'ab', 'cd', 'g'].filter(
function(e) {
return this.indexOf(e) >= 0;
},
['b','a']
);
console.log(filtered);
关于使用filter
和的问题中包含的方法indexOf
,来自https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/indexOf
indexOf()
searchElement
使用严格相等(与===
或 三等号运算符使用的方法相同)与 Array 的元素进行比较。
相反,您可以使用RegEx.prototype.test。例子:
此示例使用 Array.prototype.filter、Array.prototype.some 和 RegEx.prototype.test。请注意,它不会在循环中调用电子表格服务,因此它应该比在循环中调用电子表格服务的其他解决方案更快地返回过滤后的数组。
function example(){
var ss = SpreadsheetApp.getActiveSpreadsheet();
var rsheet = ss.getSheetByName("RemoveRecords");
var ksheet = ss.getSheetByName("KeywordsList");
var records = rsheet.getDataRange().getValues();
var keywords = ksheet.getDataRange().getValues();
var filtered = containsKeyword(records, keywords);
Logger.log(filtered);
}
function containsKeyword(records, keywords){
return records.filter(function(row){
return keywords.some(function(keyword){
return new RegExp(keyword[0].replace('.','\.')).test(row[1])
});
});
}
注意:以上要求对关键字列表或正则表达式稍作改动,以防止包含部分匹配,即其中一个关键字al.com
匹配https://www.providencejournal.com/opinion/20190810/my-turn-victor-davis-hanson-another-2004-for-democrats
要删除记录,而不是 Logger.log,您可以清除工作表并发送 .log 的结果containsKeyword
。这将比deleteRow(pos)
从 Class Sheet调用更快。
在 OP 共享的电子表格副本上运行上述示例所产生的日志。
[19-08-11 17:03:14:932 CDT] [[轮到我了:维克多·戴维斯·汉森:民主党的另一个 2004 年?,https ://www.providencejournal.com/opinion/20190810/my-turn-victor- davis-hanson-another-2004-for-democrats,2019 年 8 月 10 日星期六 23:22:21 GMT-05:00,2020 年民主党正在出现类似的情况。......许多民主党竞争者支持全民医保,对奴隶制的赔偿,......,MedicareForAll],[拜登,桑德斯都在正面交锋中击败特朗普,新的民意调查发现,https: //www.newsweek.com/biden-sanders-poll-trump- 2020-选举-1453658,2019 年 8 月 10 日星期六 23:00:00 GMT-05:00,诸如堕胎、LGBTQ 权利和移民待遇等问题已经将一些原本保守的天主教徒淘汰到民主党阵营。拜登和......,LgbtqRights],[旧金山去年与芬太尼相关的死亡人数激增了 150%,报告称,https: //www.foxnews.com/health/san-francisco-sees-dramatic-rise-in - 芬太尼相关死亡,2019 年 8 月 10 日星期六 23:00:00 GMT-05:00,2010 年有 6 人死亡归因于该药物,该药物在 2016 年造成 22 人死亡。...危机……,阿片类药物危机]]
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句