我在javascript中有一个函数可以将输出写入控制台,但是无法返回值..
fetchData: function(dateToFetch){
if (mP.viewMode == 1){
$.each(mealData.DailymPs, function(k, item){
if( item.Date == formatDate(mP.chosenDate) ){
mP.DayPlan.mPDayData = item;
return mP.populateMealDayPlan();
}
})
} else if (mP.viewMode == 2){
// debugger;
$.each(mealData.DailymPs, function(k, item){
if( item.Date == (dateToFetch) ){
mP.DayPlan.mPDayData = item;
console.log(mP.populateMealDayPlan());
var returnObj = mP.populateMealDayPlan();
return returnObj;
}
})
}
}
答案 0 :(得分:2)
您应该可以通过以下方式修复它:
...
$.each(mealData.DailymPs, function(k, item){
if( item.Date == (dateToFetch) ){
mP.DayPlan.mPDayData = item;
console.log(mP.populateMealDayPlan());
var returnObj = mP.populateMealDayPlan();
return returnObj;
}
})
...
到
...
var returnObj = null;
$.each(mealData.DailymPs, function(k, item){
if( item.Date == (dateToFetch) ){
mP.DayPlan.mPDayData = item;
console.log(mP.populateMealDayPlan());
returnObj = mP.populateMealDayPlan();
return false; // break out of each()
}
})
if(returnObj != null) return returnObj;
...
注意:您还需要在if
条件下外部化返回变量。我已经演示了如何为else条件做到这一点。
答案 1 :(得分:0)
如果要从$.each
循环返回某些内容,请将其分配给外部作用域中的变量return false;
以打破循环,然后在$.each();
调用后返回它。
答案 2 :(得分:0)
在没有看到mP.populateMealDayPlan的情况下,我的第一个猜测就是调用函数两次以获取值来更改mP的某些内部值。换句话说,如果我是对的并且你注释掉了console.log,那么应该有一个返回值。你也可以这样做:
var returnObj = mP.populateMealDayPlan();
console.log(returnObj);
而不是在console.log中调用mP.populateMealDayPlan
如果情况并非如此,那么我认为我们需要更多背景来帮助。
答案 3 :(得分:0)
您的return语句从传递给each
方法的函数返回,而不是从fetchData
函数返回。 grep function在这里很有用:
fetchData: function(dateToFetch) {
var selector = mP.viewMode == 1 ? function(item) { return item.Date == formatDate(mP.chosenDate) } : function (item) { return item.Date == dateToFetch};
var matched = $.grep(mealData.DailymPs, selector);
if (matched.length) {
var item = matched[0];
mP.DayPlan.mPDayData = item;
console.log(mP.populateMealDayPlan());
return mP.populateMealDayPlan();
}
}