不区分大小写删除具有特定数据的行

我有这个 Google Apps 脚本,它检查特定列中列出的单词并删除与这些单词匹配的行:


function sort() { 

  var sheet = SpreadsheetApp.getActiveSheet(); 

  var rows = sheet.getDataRange(); 

  var values = rows.getValues(); 

  var rowsDeleted = 0; 

  var arrayOfWords = ['möbelübernahme','können übernommen werden','caravan','wohnwagen'] 


  for (var i = values.length - 1; i >= 0; i--) {  

    var row = values[i]; 

    for (var j = 0; j < arrayOfWords.length; j++) {    

      if (row['21','17'].indexOf(arrayOfWords[j]) > -1) {         

        sheet.deleteRow(i+1);     

        rowsDeleted++;   

        break;         

      }

    } 

  } 

};

我可以检查单词不区分大小写吗?因此,如果我包含“mietwohnung”之类的单词,它将删除所有匹配选项:MIETWOHNUNG、mietwohnung、Mietwohnung?


波斯汪
浏览 131回答 2
2回答

守着星空守着你

解释:您需要将row数组中的每个元素转换为小写。为此,您需要使用map()和toLowerCase()。通过这种方式,您将应用toLowerCase到 的每个元素row。修改将在这里:if (row.map(r=>r.toLowerCase()).indexOf(arrayOfWords[j]) > -1)row['21','17']不是有效的 JavaScript 对象。你不能像那样对数组进行切片。如果您的目标是仅检查列21,17然后使用此 if 语句:if ([row[21],row[17]].map(r=>r.toLowerCase()).indexOf(arrayOfWords[j]) > -1)注意这里row[21]是列V,是工作表中的row[17]列。R记住 javascript 中的索引是从 开始的0。即,0是 列A,1是 列B等等。解决方案:function sort() {   var sheet = SpreadsheetApp.getActiveSheet();   var rows = sheet.getDataRange();   var values = rows.getValues();   var rowsDeleted = 0;   var arrayOfWords = ['möbelübernahme','können übernommen werden','caravan','wohnwagen']   for (var i = values.length - 1; i >= 0; i--) {      var row = values[i];     for (var j = 0; j < arrayOfWords.length; j++) {          if (row.map(r=>r.toLowerCase()).indexOf(arrayOfWords[j]) > -1) {                 sheet.deleteRow(i+1);             rowsDeleted++;           break;               }    }   } };

智慧大石

已提供解决方案的替代方案您可以简单地使用toLowerCase()- 这样“Mietwohnung”将变成“mietwohnung”,并且可以毫无问题地进行比较。因此,您可以对脚本进行以下修改:for (let i = values.length - 1; i >= 0; i--) {&nbsp; &nbsp;var row = values[i];&nbsp; &nbsp;var found = false;&nbsp; &nbsp;for (let k = 0; k < row.length; k++)&nbsp; &nbsp; &nbsp; for (let j = 0; j < arrayOfWords.length; j++)&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;if (row[k].toString().toLowerCase().indexOf(arrayOfWords[j]) > -1)&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; found = true;&nbsp; &nbsp;if (found == true) {&nbsp; &nbsp; &nbsp; sheet.deleteRow(i + 1);&nbsp; &nbsp; &nbsp; rowsDeleted++;&nbsp; &nbsp;}}上面的脚本循环遍历数据范围中的所有值,因此添加了另一个循环,然后使用该函数toLowerCase()检查该值是否是arrayOfWords数组的一部分,如果需要,则删除行。这里使用该found变量来指示该单词是否已找到。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript