2 回答
TA贡献1799条经验 获得超8个赞
解释:
您需要将
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;
}
}
}
};
TA贡献1946条经验 获得超3个赞
已提供解决方案的替代方案
您可以简单地使用toLowerCase()- 这样“Mietwohnung”将变成“mietwohnung”,并且可以毫无问题地进行比较。
因此,您可以对脚本进行以下修改:
for (let i = values.length - 1; i >= 0; i--) {
var row = values[i];
var found = false;
for (let k = 0; k < row.length; k++)
for (let j = 0; j < arrayOfWords.length; j++)
if (row[k].toString().toLowerCase().indexOf(arrayOfWords[j]) > -1)
found = true;
if (found == true) {
sheet.deleteRow(i + 1);
rowsDeleted++;
}
}
上面的脚本循环遍历数据范围中的所有值,因此添加了另一个循环,然后使用该函数toLowerCase()检查该值是否是arrayOfWords数组的一部分,如果需要,则删除行。这里使用该found变量来指示该单词是否已找到。
添加回答
举报