2012-04-04 6 views
-1

Ich habe eine Funktion, die ein Objekt von Werten erzeugt, aber im immer in meinem Konsolenprotokoll:Objektwerte nicht definiert und NaN

x: Array[4] 
0: undefined 
1: NaN 
2: undefined 
3: NaN 
length: 4 
y: Array[4] 
0: undefined 
1: NaN 
2: undefined 
3: NaN 
length: 4 

Die Funktion auf einem Objekt aus einer PHP-Datei erstellt Schleifen, die waren json codierte :

var sdata = {"4":{"7":["1","7","2","2"]},"3":{"3":["2","8","1","1"]}}; 

Meine Funktion ist:

function populate_collisions(){ 
gcollision = { 
    x: [], 
    y: []  
    }; 

for(var key in sdata){ 
    gcollision.x.push(sdata[key][0]); 
    gcollision.x.push(sdata[key][0] + (sdata[key][2]-1)); 
    gcollision.y.push(sdata[key][1]); 
    gcollision.y.push(sdata[key][1] + (sdata[key][3]-1)); 
} 
console.log(gcollision); 
} 

ich bin neugierig zu wissen, warum im undefined bekommen und NaN? Und wie löse ich das Problem?

Antwort

2

Ihr "Objekt/Array-Hybrid" ist 3D (3 Ebenen tief).

var sdata = { 
    "4": {      
     "7": ["1", "7", "2", "2"] 
    }, 
    "3": { 
     "3": ["2", "8", "1", "1"] 
    } 
}; 

in den ersten Punkt, haben Sie die Taste "4", dann unter ihm, eine Taste "7" und danach, Ihr Array. you lacked an additional loop:

function populate_collisions() { 
    gcollision = { 
     x: [], 
     y: [] 
    }; 

    for (var key in sdata) { 
     for (var keyTwo in sdata[key]) { 
      gcollision.x.push(sdata[key][keyTwo][0]); 
      gcollision.x.push(sdata[key][keyTwo][0] + (sdata[key][keyTwo][2] - 1)); 
      gcollision.y.push(sdata[key][keyTwo][1]); 
      gcollision.y.push(sdata[key][keyTwo][1] + (sdata[key][keyTwo][3] - 1)); 

     } 
    } 
    console.log(gcollision); 
} 
+0

Hmm ok es funktionierte aber die Addition der Werte zusammen wie Strings eher als eine mathematische Berechnung =/ – Sir

+0

dann [Dieser Beitrag] (http://stackoverflow.com/a/1133814/575527) könnte helfen Sie oder * wenn möglich * entfernen Sie die Anführungszeichen, die Ihre Werte im Array umgeben. das wird sie zu Zahlen machen. – Joseph

+0

Ich kann die Anführungszeichen, die sie in PHP gemacht werden, nicht entfernen. Ich denke, dass sie standardmäßig auf json_encode string ist. Ich werde einen Pass int versuchen. – Sir