为了账号安全,请及时绑定邮箱和手机立即绑定

在 foreach 循环中无法访问变量

在 foreach 循环中无法访问变量

幕布斯7119047 2021-12-02 17:03:54
我正在尝试为对话流构建一个 webhook,但是当我运行代码匹配时无法访问代码中的某些变量未定义var findclass = (data, day, time) => {      var match;      data.forEach(entry => {        if (entry.day === day && entry.time === time) {          console.log("found");          match=entry;//this statement has no effect on above var match//instead it creates a new local variable        }      });      return match;    }exports.tt = functions.https.onRequest((request, response) => {  let qr = request.body.queryResult;  let day = qr.parameters.day;  let time = parseInt(qr.parameters.time.substring(11, 13));  let data = [    {      day: "monday",      time: 11,      type: "lecture",      batches: ["A", "B1", "B4", "B3", "B2"],      subject: {        name: "Basic Numerical Methods",        name_short: "BNM",        coursecode: "17B1NMA531",        coursecode_short: "17MA531"      },      class: "CS1",      teachers: "SSH",      semester: 5    },    {      day: "monday",      time: 15,      type: "lecture",      batches: ["A6", "A9"],      subject: {        name: "Environmental Science",        name_short: "EVS",        coursecode: "15B11GE301",        coursecode_short: "GE301"      },      class: "CS1",      teachers: "EKT",      semester: 5    }]var match = findclass(data, day, time);  console.log(JSON.stringify(match));  if (match) {    response.send({      fulfillmentText: `Yes, ${match.subject.name_short || match.subject.name}`    });  } else {    response.send({      fulfillmentText: `No class on ${day} ,${time} hr`    });  }如果我删除 return match 语句,vscode 代码也显示 var match 未使用,这意味着它不考虑 match = entry ,但我不明白为什么?
查看完整描述

3 回答

?
POPMUISE

TA贡献1765条经验 获得超5个赞

我不知道原因,但两个更改修复了代码

1) 在顶部添加“使用严格”。
2) 定义函数为

const findclass = () => {}

而不是 var


查看完整回答
反对 回复 2021-12-02
?
人到中年有点甜

TA贡献1895条经验 获得超7个赞

我的猜测是循环中实际上没有任何匹配,因此match保持未定义。您是否确定循环中的某些内容实际上是匹配的?

此外,在 VSCode 中,如果您只是分配一个变量,而不是使用它(例如,在return语句中),它会显示该变量未使用,这是意料之中的。


查看完整回答
反对 回复 2021-12-02
?
千万里不及你

TA贡献1784条经验 获得超9个赞

我的猜测是您的声明:

var match ...

正在吊装……见:

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/var

在您的代码中,您已声明:

var match ...

两次。我认为 findClass 函数体中的声明可能要更改为局部变量...

let match;

(这是一个猜测,将根据要求删除此答案,或者如果出现更好的答案)。


查看完整回答
反对 回复 2021-12-02
  • 3 回答
  • 0 关注
  • 462 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信