2009-08-27 11 views
5

Analizando mis cerebros en este caso. Tengo el siguiente código: las primeras etapas de un juego de JavaScript. Todos los objetos están bien definidos y estoy usando jQuery para la interacción DOM. El rompecabezas se crea con el siguiente código JS:¿Por qué mi bucle for se detiene después de una iteración?

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

Sin embargo, el bucle en la parte inferior del código no irá más allá de la primera iteración. ¿Alguna idea de por qué? No se arrojan errores en absoluto.

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(); 
} 
+0

¿A qué se "ajustan" las iteraciones? – ChrisF

+0

¿Dónde se define 'JSON.parse'? –

+0

¿Qué sucede cuando depura esto? – Charlie

Respuesta

11

Posiblemente su falta de alcance variable de contador está haciendo, especialmente si usted hace un hábito de ella (ya que usted está utilizando la variable global del mismo nombre, y cualquier bucle que escribió en cualquier código que' volver a llamar puede estar haciendo lo mismo). Pruebe:

for(var i=0;i<iterations;i++) 
+1

+1. EL clásico Javscript gotcha. – AnthonyWJones

+0

Excelente - gracias – wheresrhys

1

porque this.equations = this.json.equations || [], Y, puesto que no está definido this.json.equations, que se asignan a []

+1

Eso daría como resultado que el ciclo se ejecute para cero iteraciones, no una. – chaos

+1

¿Por qué crees que json.equations no está definido? Si JSON ha analizado la entrada json a para, eter debe ser una matriz – AnthonyWJones

+1

es una oportunidad. Como no tenemos todo el proyecto disponible para echar un vistazo, podemos hacer suposiciones y usar la experiencia para sugerir posibles errores. Acabo de usar mi bola de cristal. De hecho, el error podría ser más plausible debido a un error de ámbito que usa "i" como una variable global en la instrucción for. – Rodrigo

0

Suponiendo que está usando JSON.parse como se define en https://github.com/douglascrockford/JSON-js/blob/master/json2.js, parece que la cadena de JSON no es analizar correctamente:

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

Cuando uso JSON.stringify, definido en el mismo archivo, para crear una cadena JSON de su objeto:

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 

Tenga en cuenta que la cadena que es la creación de JSON.stringify es diferente a la que usted está tratando de uso, que podría ser la causa de su problema.

Cuestiones relacionadas