• Das Erstellen neuer Accounts wurde ausgesetzt. Bei berechtigtem Interesse bitte Kontaktaufnahme über die üblichen Wege. Beste Grüße der Admin

Javascript Array ergibt leeren JSON-String

GetIT

New member
Hallo,

ich baue mir in einer Schleife ein Array zusammen:
Code:
var topOptionsPerGroup = new Array();
var leftOptionsPerGroup = new Array();
var numAll = 0;
$.each($("table#logicalTable").find("td.options"), function() {
	var option = toCamelCase($(this).find("input").val());
	
	var groupNum = parseInt(numAll / optionsNum) + 1;
	
	if ($(this).hasClass("topoptions")) {
		var tdNum = groupNum + 2;	// + 2, because there are 2 empty columns
		var numPerGroup = (numAll % optionsNum);
		
		var group = $(this).parent("tr").prev().find("td:nth-child(" + tdNum + ")").find("input").val().toString();
		if (option !== "") {
			if (typeof(topOptionsPerGroup[group]) == "undefined") {
				topOptionsPerGroup[group] = new Array();
			} 
			topOptionsPerGroup[group][numPerGroup] = option;
		}
		
	}
        numAll++;
});

Der Code kurz zusammengefasst:
Gehe über alle Optionen (die 2. <tr>, da drin alle <td><input></td>) und hole dazu die passende Gruppe (1. <tr><input></tr>) und erzeuge daraus ein Array.
Das Array(topOptionsPerGroup) sieht im log des Firebug so aus: <siehe den kleinen Screenshot>

Wenn ich daraus einen JSON-String erzeuge, ist dieser leer.
Code:
JSON.stringify(topOptionsPerGroup) - dh. sowohl im log des Firebug steht nur "[]" und ein alert() gibt nur "" aus.
Warum ?

- - - Aktualisiert - - -

Ich habe das ganze jetzt als Objekt gespeichert.


Code:
var topOptionsPerGroup = {};    //Objekt statt Array
var leftOptionsPerGroup = {};    //Objekt statt Array
var numAll = 0;
var i = 1;
$.each($("table#logicalTable").find("td.options"), function() {
	var option = toCamelCase($(this).find("input").val());
	
	var groupNum = parseInt(numAll / optionsNum) + 1;
	
	if ($(this).hasClass("topoptions")) {
		var tdNum = groupNum + 2;	// + 2, because there are 2 empty columns
		var numPerGroup = (numAll % optionsNum);
				
		var group = toCamelCase($(this).parent("tr").prev().find("td:nth-child(" + tdNum + ")").find("input").val()).toString();
		if (option !== "") {
			if (typeof(topOptionsPerGroup[group + "#" + i]) == "undefined") {
				topOptionsPerGroup[group + "#" + i] = {};    //Objekt statt Array
			} 
			topOptionsPerGroup[group + "#" + i][numPerGroup] = option;
		}
				
	} else if ($(this).hasClass("leftoptions")) {
		// muss noch gemacht werden	
	}
	numAll++;
});
damit gehts.

Aber es wäre trotzdem interressant zu wissen, warum das als Array net geht.
Also wenn jemand ne Idee hat dann bitte posten.
Danke
 

Anhänge

  • Bildschirmfoto 2015-04-19 um 13.07.06.png
    Bildschirmfoto 2015-04-19 um 13.07.06.png
    21 KB · Aufrufe: 2
  • Bildschirmfoto 2015-04-19 um 13.01.37.png
    Bildschirmfoto 2015-04-19 um 13.01.37.png
    13 KB · Aufrufe: 1
  • Bildschirmfoto 2015-04-19 um 13.01.53.png
    Bildschirmfoto 2015-04-19 um 13.01.53.png
    6,7 KB · Aufrufe: 6
Das funktioniert bei einem Array schon auch. Nur werden bei einem Array nur numerische Eigenschaften des Array-Objektes angezeigt (und auch bei JSON.stringify() beachtet)...

PS: Den Array-Konstruktor sollte man besser nicht verwenden: inkonsistent und länger zu schreiben als die Literalschreibweise.
 
Zurück
Oben