我已经检查了其他似乎重复的问题,但没有一个问题解决了我的问题。我有这个简单的函数循环一个规则对象数组并返回一个匹配“类型”的那个:
$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
。我已经尝试了一切,但我不知道为什么会发生这种情况。
谢谢!
答案 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;
};