javascript中无意义的返回模式

时间:2013-11-07 19:25:55

标签: javascript

我有以下代码来浏览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是正确的。问题是,当我执行此函数的console.log时,它显示为未定义,当我在控制台中评估语句时,它返回undefined。为什么是这样?

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

3 个答案:

答案 0 :(得分:2)

找到正确的对象时,回调会返回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;
}

答案 1 :(得分:1)

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;
//          ^^^^^^
        }
    });
}

答案 2 :(得分:0)

正如弗拉德所说,你的回归只是跳出了给每个()的匿名函数。

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

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;
}

干杯,
弗洛里安