Почему мой цикл for останавливается после одной итерации? - PullRequest
5 голосов
/ 27 августа 2009

Я ломаю голову над этим. У меня есть код ниже: первые этапы игры на JavaScript. Все объекты четко определены, и я использую jQuery для взаимодействия с DOM. Головоломка создана с использованием следующего кода JS:

var mypuzzle = new puzzle("{solution:'5+6+89',equations:[['5+3=8',23,23],['5+1=6',150,23],['5+3=6',230,23]]}");

Однако цикл внизу кода не пойдет дальше первой итерации. Есть идеи почему? Никаких ошибок не выдается.

function equationBox(equation, top, left) {//draggable equation box
    this.reposition = function() {
        this.top = 0;
        this.left = 0;
    }
    this.top = 0;//make random
    this.left = 0;//make random
    this.equation = equation;
    if(top && left) {
        this.top = top; 
        this.left = left;
    }
    this.content = this.equation.LHS.string + '<span> = </span>' + this.equation.RHS.string;
    this.DOM = $('<li>').html(this.content);
}


function puzzle(json) {

    this.addEquationBox = function(equationBox) {
        $('#puzzle #equations').append(equationBox.DOM);
    }

    this.init = function() {
        //this.drawPuzzleBox();
        this.json = JSON.parse(json);
        this.solution = new expression(this.json.solution || '');
        this.equations = this.json.equations || [];
        var iterations = this.equations.length;
        for(i=0;i<iterations;i++)
        {
            console.log(i);
            this.addEquationBox(new equationBox(stringToEquation(this.equations[i][0]),this.equations[i][1], this.equations[i][2])); 
        }
    }
    this.init();
}

Ответы [ 3 ]

11 голосов
/ 27 августа 2009

Возможно, ваша неспособность охватить переменную-счетчик делает это, особенно если вы привыкли к этому (поскольку вы используете глобальную переменную с таким именем, и любые циклы, которые вы написали в любом коде, который вы вызываете, могут быть делаю то же самое). Попробуйте:

for(var i=0;i<iterations;i++)
1 голос
/ 27 августа 2009

потому что this.equations = this.json.equations || [], и поскольку this.json.equations не определено, ему присваивается значение []

0 голосов
/ 27 августа 2009

Предполагая, что вы используете JSON.parse, как определено в https://github.com/douglascrockford/JSON-js/blob/master/json2.js,, кажется, что ваша строка json не анализируется должным образом:

var string1 = "{solution:'5+6+89',equations:[['5+3=8',23,23],['5+1=6',150,23],['5+3=6',230,23]]}"
JSON.parse(string1); // throws SyntaxError("JSON.parse")

Когда я использую JSON.stringify, определенный в том же файле, для создания строки JSON из вашего объекта:

var obj = {solution:'5+6+89',equations:[['5+3=8',23,23],['5+1=6',150,23],['5+3=6',230,23]]}
var string2 = JSON.stringify(obj);
// {"solution":"5+6+89","equations":[["5+3=8",23,23],["5+1=6",150,23],["5+3=6",230,23]]}
JSON.parse(string2); // returns a proper object

Обратите внимание, что создаваемая JSON.stringify строка отличается от той, которую вы пытаетесь использовать, что может быть причиной вашей проблемы.

...