我有以下代码来浏览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循环的包实现
答案 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;
}
干杯,
弗洛里安