我有两个数组根据标准进行自我更新和相互更新(描述时间比我怀疑的解决方案还长)。

我最终得到的是一个在while循环内调用自身的函数。可以想象,这导致了可笑的递归量。

这是一个示例(简短说明)

var buildArray = firstFunction(new Array(),existingArray)

函数firstFunction(thisArray,existingArray){
     for(test1 = 0; test1          if(existingArray [test1] [3] =='2'){
           secondFunction(thisArray,existingArray,test1);
        }
     }

function secondFunction(thisArray,existingArray,t1){
       for(test2 = 0; test2           if(thisArray [test1] existingArray [test2 [0]){
            //对现存数组做一堆事情,现在现存数组已更改,整个过程需要从头开始!
     返回firstFunction(new Array(),existingArray);

              //检查值是否不在'thisArray'中
   var check = new Array(existingArray [test1]);
  否则如果(jQuery.inArray(check,thisArray ==-1){
         //值不在新数组中,因此添加它
        thisArray.push(check);
       // thisArray已更改。需要重启第二个功能
       secondFunction(thisArray,existingArray);
     }

   }
 }

}
}


我希望

返回secondFunction(thisArray,existingArray);


将重置并重新启动该功能,但显然没有发生。

有没有办法停止当前函数并循环并使用更新的变量重新启动?

最佳答案

我没有得到您正在尝试做的事情,但是基于以下事实,即return停止了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;

关于javascript - 如何使用更新的变量停止递归和/或重新启动当前函数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4495769/

10-09 15:07