JavaScript 中的无意义的返回模式

Non-sensical return pattern in javascript

本文关键字:模式 返回 无意义 JavaScript      更新时间:2023-09-26

我有以下代码来浏览 objs 列表并找到 obj 的 "Title" 字段等于 objTitle

function objFinder(objTitle, event, objs) {
can.each(objs, function(obj, key) {
    if (obj["Title"].trim() == objTitle.trim()) {
        console.log(obj)
        console.log(objTitle + " found")
         return obj;
    }
})
}

我已经在 chrome 中的调试器中浏览了一下,看到它确实命中了 return 语句,并且 return 语句中的 obj 是正确的。问题是当我做控制台时.log这个函数显示为未定义,当我在控制台中评估语句时,它返回未定义。这是为什么呢?

can.each() 只是一个 foreach 循环的包实现

当你找到正确的对象时,让回调返回 false:

function objFinder(objTitle, event, objs) {
var result = null;
can.each(objs, function(obj, key) {
    if (obj["Title"].trim() == objTitle.trim()) {
        console.log(obj)
        console.log(objTitle + " found")
         result = obj;
         return false;
    }
})
return result;
}

return语句适用于其function父级,它不是objFinder

function objFinder(objTitle, event, objs) {
    can.each(objs, function(obj, key) {
//                 ^^^^^^^^
        if (obj["Title"].trim() == objTitle.trim()) {
            console.log(obj)
            console.log(objTitle + " found")
            return obj;
//          ^^^^^^
        }
    });
}

正如 Vlad 所说,你的返回只是跳出给 each() 的匿名函数。

要解决此问题,您可以执行以下操作:

function objFinder(objTitle, event, objs) {
  //Btw. where do you define "can"?
  var retObj = undefined;
  can.each(objs, function(obj, key) {
      if (obj["Title"].trim() == objTitle.trim()) {
          console.log(obj)
          console.log(objTitle + " found")
          retObj = obj;
          return;
      }
  });
  return retObj;
}

干杯
佛瑞恩