0

我有以下代码来遍历 objs 列表并找到“Title”字段等于 objTitle 的 obj

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 时,它显示为未定义,当我在控制台中评估语句时,它返回未定义。为什么是这样?

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

4

3 回答 3

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;
}
于 2013-11-07T19:30:46.533 回答
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;
//          ^^^^^^
        }
    });
}
于 2013-11-07T19:28:59.100 回答
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;
}

干杯,
弗洛里安

于 2013-11-07T19:32:01.353 回答