Функция не вызывает себя ... достаточно - PullRequest
0 голосов
/ 27 марта 2012

Каждая строка в массиве является числом, например 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 ]

1 голос
/ 27 марта 2012

Я думаю, вы могли бы просто пойти с оператором по модулю, если это то, что вы хотели достичь

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 голос
/ 27 марта 2012

Функция, которую вы даете, не сбалансирована { }.Когда я добавляю один в конце и запускаю его, я получаю результат, который, как вы говорите, вы хотите - ["36", "2", "27"].Должно быть что-то не так, или вы неправильно скопировали код.

Чтобы понять операцию, я добавил это в начало divideBySix:

console.log(w, array1.toString());
0 голосов
/ 27 марта 2012

Когда я тестирую код, вот что он делает:

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

...