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

时间:2018-02-15 08:55:46

标签: javascript jquery angularjs

我已经检查了其他似乎重复的问题,但没有一个问题解决了我的问题。我有这个简单的函数循环一个规则对象数组并返回一个匹配“类型”的那个:

$ctrl.findRule = function(ruleName){
    $ctrl.rules.forEach(function(rule){
        if(rule.type === ruleName){
            console.log("returning rule: " + rule.type);
            return rule;
        }
    });
    return null;
};

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

var wordCountRule = $ctrl.findRule("word_count");
console.log(wordCountRule);

我在控制台returning rule: word_count上看到,然后console.log(wordCountRule)显示undefined。我已经尝试了一切,但我不知道为什么会发生这种情况。

谢谢!

2 个答案:

答案 0 :(得分:1)

问题是因为您从内部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;
  });
};

答案 1 :(得分:0)

定义一个变量,然后为其分配rule。最后返回该变量:

$ctrl.findRule = function(ruleName){
  var retRes = null;
  $ctrl.rules.forEach(function(rule){
    if(rule.type === ruleName){
        console.log("returning rule: " + rule.type);
        retRes = rule;
    }
  });
  return retRes;
};