JavaScript 中的无意义的返回模式
Non-sensical return pattern in 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 是正确的。问题是当我做控制台时.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;
}
干杯
佛瑞恩
相关文章:
- 如何在模式框中显示ajax调用返回的数据
- 多次调用方法后返回相同promise的模式
- 如果返回false,如何在提交时关闭引导模式
- 如何使用lodash返回与模式匹配的属性数组
- 是否可以使find()和findOne()方法只返回模式字段
- Queryselect()在javascript模块模式中返回null
- jQuery - 用户单击模式上的“是”按钮后返回到初始屏幕
- 这是一种常见的模式吗?(返回数据而不是返回承诺)
- JavaScript 正则表达式,返回模式之前和之后的所有内容
- JavaScript 中的无意义的返回模式
- 是否可以使控制器返回模式窗口的数据?MVC5 ASP.NET
- 原型揭示模式和'这'嵌套函数或返回对象中
- 通过 JS 模块模式返回 ajax 响应
- 模式返回var &&var = = = & # 39;一些# 39;在javascript
- 关闭bootstrap模式返回按钮
- 为什么组合构造函数/原型模式返回对象类型
- javascript模块模式返回对象引用
- JavaScript模块模式-返回的对象===模块||facade
- Javascript链接模式返回该对象的等价项,而不是返回this
- Jquery点击打开模式返回“;undefined不是函数”;