Javascript For循环在递归函数中断时不传递结果
目前,我正在使用现有角度控制器中的递归函数来生成基于树结构的索引数组,这将创建到指定目标值的“分支”。该函数的目的是递归检查深度嵌套对象的值,并在数组出现时循环。该函数一直工作,直到找到目标节点并与之匹配为止。根据我所知道的返回调用,应该循环回for循环。相反,它退出函数并返回Javascript For循环在递归函数中断时不传递结果,javascript,angularjs,for-loop,recursion,angular-controller,Javascript,Angularjs,For Loop,Recursion,Angular Controller,目前,我正在使用现有角度控制器中的递归函数来生成基于树结构的索引数组,这将创建到指定目标值的“分支”。该函数的目的是递归检查深度嵌套对象的值,并在数组出现时循环。该函数一直工作,直到找到目标节点并与之匹配为止。根据我所知道的返回调用,应该循环回for循环。相反,它退出函数并返回未定义的。我注意到抛出的错误是由Angular生成的,如下所示 angular.js:13236 ReferenceError: result is not defined at questionsControll
未定义的
。我注意到抛出的错误是由Angular生成的,如下所示
angular.js:13236 ReferenceError: result is not defined
at questionsController.self.findIndex (questions-controller.js:724)
at questionsController.self.findIndex (questions-controller.js:734)
at questionsController.self.findIndex (questions-controller.js:724)
at questionsController.self.addQuestions (questions-controller.js:711)
at fn (eval at compile (angular.js:14086), <anonymous>:4:262)
at expensiveCheckFn (angular.js:15076)
at callback (angular.js:24546)
at Scope.$eval (angular.js:16820)
at Scope.$apply (angular.js:16920)
at HTMLButtonElement.<anonymous> (angular.js:24551)
请让我知道是否有关于这个问题的任何其他信息可以帮助澄清问题。我强烈建议您使用迭代数组而不是计数循环,因为
.forEach()
没有计数器,使访问数组元素更干净。您需要定义结果
,例如使用var
或let
。另外,returnresult=…
不是必需的,只需编写return…
。注意:您没有使用索引
参数,所以请不要使用它。如果您声明result
,该函数将工作。哦,天哪,就是这样!谢谢你的快速回复,我希望这是类似的东西,担心我今天已经看了太多分钟的代码了。谢谢你的更正和代码建议,有没有办法让我投票支持你的答案?这是我在堆栈中的第一篇文章。我强烈建议您使用迭代数组,而不是计数循环,因为.forEach()
没有计数器,因此访问数组元素更干净。您需要定义result
,例如使用var
或let
。另外,returnresult=…
不是必需的,只需编写return…
。注意:您没有使用索引
参数,所以请不要使用它。如果您声明result
,该函数将工作。哦,天哪,就是这样!谢谢你的快速回复,我希望这是类似的东西,担心我今天已经看了太多分钟的代码了。谢谢你的更正和代码建议,有没有办法让我投票支持你的答案?这是我的第一篇文章。
self.findIndex = function (map, target, arr, index) {
if (map instanceof Array) {
for (var x = 0; x < map.length; x++) {
var newArr = arr.slice();
newArr.push(x);
result = self.findIndex(map[x], target, newArr, x);
if (result.length > 0) {
return result;
}
}
} else if (map instanceof Object) {
if (map.id == target.id) {
return arr;
}
else if (map.questions && map.questions.length > 0) {
return result = self.findIndex(map.questions, target, arr, index);
}
}
return [];
};
[
{
id: 1,
name: 'foo',
questions: [
{
id: 2,
name: 'bar',
questions: []
}
]
},
{
id: 3,
name: 'foobar',
questions: [
{
id: 4,
name: 'barfoo',
questions: [
{
id: 5,
name: 'foobarfoo',
questions: []
},
{
id: 6,
name: 'barfoobar',
questions: []
}
]
}
]
}
]