功能不是自称......足够了

时间:2012-03-26 22:12:05

标签: javascript arrays string function increment

数组中的每个字符串都是一个数字,例如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成功增加了。所以我知道它至少到目前为止......

3 个答案:

答案 0 :(得分:1)

我认为你可以选择modulo运算符,如果这是你想要实现的目标

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);

答案 1 :(得分:1)

您提供的功能具有不平衡{ }。当我在最后添加一个并运行它时,我会得到你想要的结果 - ["36", "2", "27"]。必须有其他错误,或者您没有正确复制代码。

为了理解操作,我将其添加到divideBySix

的开头
console.log(w, array1.toString());

答案 2 :(得分:0)

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

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