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变量来指示该单词是否已找到。
添加回答
举报
