javascript - if语句块执行错误的逻辑错误
问题描述
我的程序从同一个电子表格的 2 个选项卡中提取数据;但是,它一直从错误的“if”语句块执行。例如var region = ss.getRange(i,5);
contains[us, ca, de, br, mx] 和var user1 =bs.getRange(i,1);
contains[us, ca, de]。我希望我的 if 语句比较用户 1 是否包含任何区域值然后执行,如果它不执行第二个“if”语句,以便它可以将其发送到 user2CC。在这个例子中,看起来我的程序继续基于“决定”而不是区域是否 == 或!= 到 user1。
另外,对于我在这里可能遇到的任何格式问题,我深表歉意,我很新,正在学习。感谢您抽出时间阅读并研究此内容。
我还注意到,如果我包含另一个 if 语句decision == "wrong"
,包括user1 == region
但不包含另一个像user1 != region && decision == "wrong"
它执行正常的附加语句?
function sendEmails() {
SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Main").activate();
var ss = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
var lr = ss.getLastRow();
var bs = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Regions").activate();
var lRow = bs.getLastRow();
// Fetches templates for email
var Acceptable = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Templates").getRange(1, 1).getValue();
var Wrong = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Templates").getRange(2, 1).getValue();
var user1CC = "main@email.com" + ',' + "user1@email.com";
var user2CC = "main@email.com" + ',' + "user2@email.com";
// loops through "Main" spreadsheet to check if email has been sent and pull necessary data to construct email
for (var i = 2; i <= lr; i++) {
var cBox = ss.getRange(i, 13).getValue();
var region = ss.getRange(i, 5).getValue();
var type = ss.getRange(i, 6).getValue();
var decision = ss.getRange(i, 15).getValue();
// loops through "Regions" tab in spreadsheet to get specific regions by person(column)
for (var j = 2; j <= lRow; j++) {
var user1 = bs.getRange(j, 1).getValues();
if (cBox == false) {
if ((user1.includes(region[j]) && (decision == "Acceptable") {
var check = ss.getRange(i, 13).setValue("Yes");
var time = ss.getRange(i, 14).setValue(new Date());
var currentEmail = ss.getRange(i, 2).getValue();
var decision = ss.getRange(i, 15).getValue();
var messageBody = Acceptable.replace("{Decision}", decision);
Logger.log(messageBody);
var subjectLine = "subject";
MailApp.sendEmail(currentEmail, subjectLine, messageBody, {
cc: user1CC
});
break;
}
if ((user1.indexOf(region[j] == -1) && (decision == "Acceptable") {
var check = ss.getRange(i, 13).setValue("Yes");
var time = ss.getRange(i, 14).setValue(new Date());
var currentEmail = ss.getRange(i, 2).getValue();
var decision = ss.getRange(i, 15).getValue();
var messageBody = Acceptable.replace("{Decision}",
decision);
var subjectLine = "subject";
MailApp.sendEmail(currentEmail, subjectLine, messageBody, {
cc: user2CC
});
Logger.log(messageBody);
break;
}
} //ends cBox statement
} // ends 'for' loops that iterates cBox and 'if' statements
}
}
解决方案
我能够最终复制您的代码,问题在于您在 if 语句中放置的条件。在下面的代码片段中:
if((user1 == region) && (decision == "Acceptable") && (type == "Video"))
您正在尝试将作为值数组 ["us", "ca", "de"] 的 user1 与作为另一个值数组[ " us", "ca", "de", "br", “mx”]。您不能简单地使用user1 == region放置和比较这两个数组,因为该语句将始终返回False,因为它们作为数组的值不同。
如果要比较数组之间的值,则应使用它们的索引(例如 region[j])按项目访问它们。此外,您可以尝试使用 javascript 的 include() 函数来检查数组中是否包含特定值。您可以通过重写 if 语句来尝试它,如下所示:
if((user1.includes(region[j])) && (decision == "Acceptable") && (type == "Video"))
至于第二个 if 语句,您可以将if替换为else if以防止代码在满足第一个条件时运行该语句。此外,您可以使用 javascript 函数indexOf()来评估该区域值是否在user1中不存在。如果被评估的数组中不存在传递的值,则 indexOf() 函数返回-1 。请看下面的示例代码:
if((user1.indexOf(region[j]) == -1) && (decision == "Acceptable"))
推荐阅读
- c - 如何使用llvm插入指令?
- python - 如果代码运行良好,为什么会出现列表索引错误?
- reactjs - 使用弹出后如何在 create-react-app 中使用 less?
- c# - 如何将空间(地理)矢量数据导入 Unity?
- flutter - 颤振错误,我的手机没有响应,从来没有
- javascript - 向多个生成的元素添加事件侦听器
- linux - 查找不以指定字符串结尾的文本文件的快速方法
- android - Android - 如何在自定义视图上实现 android:onClick?
- javascript - 如何在 Typescript 中生成 * 数组
- javascript - clearTimeout 在递归函数中不起作用