Javascript函数返回未定义的值,即使console.log显示正确的值

Javascript函数返回未定义的值,即使console.log显示正确的值,javascript,jquery,angularjs,Javascript,Jquery,Angularjs,我检查了其他似乎重复的问题,但没有一个解决了我的问题。我有一个简单的函数,它在规则对象数组中循环,并返回具有匹配“type”的对象: 我按如下方式调用此函数: var wordCountRule = $ctrl.findRule("word_count"); console.log(wordCountRule); 我在控制台上看到返回规则:word\u count,然后控制台.log(wordCountRule)显示未定义的。我什么都试过了,不知道为什么会这样 谢谢 问题是因为您是从内部for

我检查了其他似乎重复的问题,但没有一个解决了我的问题。我有一个简单的函数,它在规则对象数组中循环,并返回具有匹配“type”的对象:

我按如下方式调用此函数:

var wordCountRule = $ctrl.findRule("word_count");
console.log(wordCountRule);
我在控制台
上看到返回规则:word\u count
,然后
控制台.log(wordCountRule)
显示
未定义的
。我什么都试过了,不知道为什么会这样


谢谢

问题是因为您是从内部
forEach
处理程序函数返回值,而不是从外部
findRule()
函数返回值

要解决此问题,可以定义一个变量来保存返回值,并在内部范围内对其进行修改:

$ctrl.findRule = function(ruleName) {
  var returnVal = null;
  $ctrl.rules.forEach(function(rule) {
    if (rule.type === ruleName) {
      returnVal = rule;
    }
  });
  return returnVal;
};
但是,您应该注意,您正在寻找一个值,可以直接使用
find()
,而无需显式循环:

$ctrl.findRule = function(ruleName) {
  return $ctrl.rules.find(function(rule) {
    return rule.type === ruleName;
  });
};
$ctrl.findRule = function(ruleName) {
  return $ctrl.rules.find(function(rule) {
    return rule.type === ruleName;
  });
};