我有两个数组,它们根据标准进行自我更新和彼此更新(描述的时间比我怀疑的解决方案要长得多)。
我最终得到的是一个在 while 循环中调用自身的函数。正如你可以想象的,这会导致大量的递归。
这是一个示例(保持简短)
var buildArray=firstFunction(new Array(), existingArray)
function firstFunction(thisArray, existingArray){
for(test1=0; test1<existingArray.length; test1++){
if(existingArray[test1][3]=='2'){
secondFunction(thisArray, existingArray, test1);
}
}
function secondFunction(thisArray, existingArray, t1){
for(test2=0; test2<thisArray.length; test2++){
if(thisArray[test1]<=existingArray[test2][1] || thisArray[test1]>existingArray[test2[0]){
// do a bunch of stuff to existingArray, now that existingArray has changed, the whole process needs to start again FROM THE BEGINNING!!!
return firstFunction(new Array(), existingArray);
// check that the value isn't already in the 'thisArray'
var check= new Array(existingArray[test1]);
else if (jQuery.inArray(check, thisArray==-1){
// value isn't in the new array, so add it
thisArray.push(check);
// thisArray has changed. need to restart the the second function
secondFunction(thisArray,existingArray);
}
}
}
}
}
我希望
return secondFunction(thisArray, existingArray);
能够重置并重新启动该功能,但显然这没有发生。
有没有办法停止当前的函数和循环并使用更新的变量重新启动?
I've got two arrays which are updating themselves and each other based on criteria (it is way longer to describe than I suspect the solution is).
What I end up with is a function which calls itself within a while loop. As you can imagine, this causes a ridiculous amount of recursion.
Here's an example (keeping it short)
var buildArray=firstFunction(new Array(), existingArray)
function firstFunction(thisArray, existingArray){
for(test1=0; test1<existingArray.length; test1++){
if(existingArray[test1][3]=='2'){
secondFunction(thisArray, existingArray, test1);
}
}
function secondFunction(thisArray, existingArray, t1){
for(test2=0; test2<thisArray.length; test2++){
if(thisArray[test1]<=existingArray[test2][1] || thisArray[test1]>existingArray[test2[0]){
// do a bunch of stuff to existingArray, now that existingArray has changed, the whole process needs to start again FROM THE BEGINNING!!!
return firstFunction(new Array(), existingArray);
// check that the value isn't already in the 'thisArray'
var check= new Array(existingArray[test1]);
else if (jQuery.inArray(check, thisArray==-1){
// value isn't in the new array, so add it
thisArray.push(check);
// thisArray has changed. need to restart the the second function
secondFunction(thisArray,existingArray);
}
}
}
}
}
I was hoping that
return secondFunction(thisArray, existingArray);
would reset and restart the function, but apparently that isn't happening.
Is there a way to stop the current function and loops and restart with the updated variables?
发布评论
评论(2)
我不明白你正在尝试做什么,但是基于 return 停止第二个函数中的执行这一事实,并且 thisArray 永远不会改变,
您可以向第一个函数添加一个循环:
并在第二个函数中添加一个循环,而不是返回数组返回 true:
i do not get what you are trying yo do, however based on the fact that return stop the execution in the secondFunction, and thisArray is never changed,
you can add a loop to the firstFunction:
and in the secondFunction instead of returning the array return true:
我注意到的一些事情:
secondFunction()
中,即使您有参数t1
,您也可以secondFunction() 时 访问
不包含最后一个参数,test1
secondFunction()
之前没有 return,即使您在 OP 中提到了它,else if ( jQuery.inArray(check, thisArray==-1){
,缺少一个“)”if(thisArray[test1]<=existingArray[test2][1] || thisArray [test1]>existingArray[test2[0]){
for(test1=0; test1 中缺少一个“]”,它应该是
for(var test1...
让解析器知道它在for(var test2...
让解析器知道它在递归中是一个独立的变量(当然假设你希望这种情况发生)我是说您编辑了代码以将其发布在这里。这当然很好,但这让我相信代码的某些部分丢失了。
就缺少的
var
而言,这可能符合您的兴趣,但解析器可能会感到困惑。如果没有var
,则变量是在文档级别定义的,而不是在函数级别或最内部范围定义。我不知道你是否意识到这一点或者这是否是一个问题。Some things I noticed:
secondFunction()
you accesstest1
even though you have a parametert1
secondFunction()
doesn't contain that last parametersecondFunction()
doesn't have a return before it even though you mentioned it in your OPelse if (jQuery.inArray(check, thisArray==-1){
, which is missing a ")"if(thisArray[test1]<=existingArray[test2][1] || thisArray[test1]>existingArray[test2[0]){
missing a "]"for(test1=0; test1<existingArray.length; test1++){
it should befor(var test1...
to let the parser know it's a variable on its own in the recursion (assuming you want this to happen of course)for(test2=0; test2<thisArray.length; test2++){
it should befor(var test2...
to let the parser know it's a variable on its own in the recursion (assuming you want this to happen of course)I'm saying that you edited the code to post it here. That is fine of course, but it makes me believe that some part of the code is missing.
As far as the missing
var
s is concerned, that may be in your interest, but the parser may get confused. If there's novar
the variable is defined at document-level, not at function-level nor at the innermost scope. I don't know if you aware of this or if it's an issue.