【问题标题】:Function not calling itself... enough函数不调用自己......足够了
【发布时间】:2012-04-10 11:00:00
【问题描述】:

数组中的每个字符串都是一个数字,例如array1 = ["1296", "12", "27"];

对于上面的每个字符串,如果可以除以 6 没有余数,我想至少这样做一次,然后如果结果仍然超过 2 个字符,重复。然后替换相同位置的字符串,这样数组就会变成["36", "2", "27"];

到目前为止,我的代码部分有效。

w=0;
function divideBySix(){
            if ((array1[w] / 6) == (Math.floor(array1[w] / 6))) {
            var temp = array1[w] / 6;
            array1[w] = temp.toString();
            if (array1[w].length < 3) {
                w++;
            }
            divideBySix();
    }

该函数成功地将第一个字符串除以6一次,然后一次又一次地调用自己,直到结果在2个字符以内。此时,它应该继续调用自己,并对数组的下一个字符串执行相同的操作。但它不会执行下一个字符串。我不知道为什么它在完成第一个字符串后停止。所以数组看起来像这样["36", "12", "27"]; 另外,w 成功地增加了。所以我知道它至少能做到这一点......

【问题讨论】:

    标签: javascript arrays string function increment


    【解决方案1】:

    你给的函数不平衡{ }。当我在最后添加一个并运行它时,我会得到你想要的结果——["36", "2", "27"]。一定是有其他问题,或者你没有正确复制代码。

    为了理解操作,我在divideBySix开头添加了这个:

    console.log(w, array1.toString());
    

    【讨论】:

      【解决方案2】:

      如果这是您想要实现的目标,我认为您可以使用模运算符

      if(array1[w] % 6 == 0) doSomething()

      为了解决您当前的问题,您可以引入第二个功能;对我来说,它适用于:

       function divideBySix(array){
           for(var i = 0; i < array.length; i++){
             array[i] = divideNumber(array[i], 0); 
           }           
      }
      
      function divideNumber(nr, ct){
          if((ct < 1 || nr > 99) && nr%6 == 0 ) return divideNumber(nr/6, ct+1);
          else return nr;            
      }
      
      var array1 = ["1296", "12", "27"];  
      
      divideBySix(array1);
      
      alert(array1);
      

      【讨论】:

      • 这并没有解决这个特殊的问题,但它确实让我的代码更加优雅。感谢您注意到这一点!
      • @monkeyblot 玩了一会儿,不知道你是否已经解决了你的问题,但如果我必须解决它,我会这样做:(编辑我的答案;)
      【解决方案3】:

      当我测试代码时,它就是这样做的:

      http://jsfiddle.net/Guffa/x4fNP/

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-04-05
        • 1970-01-01
        • 2011-03-08
        • 1970-01-01
        相关资源
        最近更新 更多