我有两个基于标准更新自己和彼此的数组(描述的时间比我怀疑的解决方案要长)。
我最终得到的是一个在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);
会重置并重启该功能,但显然没有发生。
有没有办法停止当前函数并循环并使用更新的变量重新启动?
答案 0 :(得分:3)
我没有得到你正在尝试做的事情,但是基于返回停止在secondFunction中执行的事实,并且thisArray永远不会改变, 你可以在firstFunction中添加一个循环:
function firstFunction(thisArray, existingArray){
var restart = true;
while(restart)
{
restart = false;
for(test1=0; !restart && test1<existingArray.length; test1++){
if(existingArray[test1][3]=='2'){
if(secondFunction(thisArray, existingArray, test1))
{
restart = true;
}
}
}
}
并且在secondFunction中而不是返回数组返回true:
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 true;
答案 1 :(得分:0)
我注意到的一些事情:
secondFunction()
,test1
中的t1
secondFunction()
的第二次调用不包含最后一个参数secondFunction()
的第二次调用即使你在OP中提到它,也没有回复else if (jQuery.inArray(check, thisArray==-1){
,缺少“)”if(thisArray[test1]<=existingArray[test2][1] || thisArray[test1]>existingArray[test2[0]){
缺少“]”for(test1=0; test1<existingArray.length; test1++){
中应该是for(var test1...
让解析器在递归中知道它自己是一个变量(假设你希望这种情况发生在当然)for(test2=0; test2<thisArray.length; test2++){
中应该是for(var test2...
让解析器在递归中知道它自己是一个变量(假设你希望这种情况发生在当然)我说你编辑了代码在这里发布。当然没关系,但它让我相信代码的某些部分缺失了。
就丢失的var
而言,这可能符合您的利益,但解析器可能会感到困惑。如果没有var
,则在文档级别定义变量,而不是在函数级别,也不在最内层范围。我不知道你是否意识到这一点或是否是一个问题。