JS Object nach value Sortieren

Ozan Cörüt

Grünschnabel
Hi,

habe ein JS Object mit z.B. der Form:

Code:
[]
HTML = 1
SPAN = 204
DIV = 132

Wie kann ich das Object so nach dem Wert ordnen, das am Ende das Object folgendermaßen ausschaut

Code:
[]
HTML = 1
DIV = 132
SPAN = 204

Habe schon 1000 Seite durchsucht dort sind sehen die Objekte aber immer etwas anders aus...
 
Ich verstehe nicht, in welcher Form die Daten vorliegen. Was du dort als JS Object postest, lässt das leider nicht erkennen.

Meinst du so was?

Code:
{
    "HTML": 1,
    "SPAN": 204,
    "DIV": 132
}
 
Also nochmal genauer:

ich will den DOM einer Website auslesen. Daraus erstelle ich ein Array/Object das immer einen TagName = Anzahl der Tags

mit dieser Funktion

Code:
var tagCount = new Array();
	
	var allTags = $( '*', contentDocument );	
	
	$.each( allTags, 
			function() {
				if( typeof( tagCount[ this.tagName ] ) == 'undefined' )
					tagCount[this.tagName] = 1;
				else
					tagCount[ this.tagName] = tagCount[ this.tagName] + 1;
			}			
	);


z.B.:

Code:
HTML: 1
SPAN: 5
H1: 6
DIV: 3

dieses Objekt möchte ich ordnen, so dass es am Ende so ausschaut

Code:
HTML:  1
DIV:    3
SPAN:  5
H1:     6

das Ding dabei ist, dass ich die Werte sortieren kann, die TagNamen aber gleich bleiben, also kommt ein falsches Ergebnis raus z.B.:

Code:
HTML: 1
SPAN: 3
H1: 5
DIV: 6
 
Zuletzt bearbeitet:
Lass dir die Daten mal mittels JSON.stringify() in die Konsole ausgeben. Dass FireBug dir das anzeigt ist ja schön, aber wo kommen die Daten her? Ist das jetzt die Ansicht von einem Objekt aus deinem JavaScript Code?

Falls es sich wirklich um eine Objekt handelt, dann kannst du da nichts sortieren. Ein Objekt ist im Prinzip eine Hashmap und hat keine Ordnung. Du kannst es nur bei der Ausgabe machen. Oder du steckst alles in ein Array.

Edit: Jetzt bekommt das ganze Hand und Fuß. Ich gucke mir deinen Code erst mal an.
 
Wenn ich JSON.stringify() benutze gibt er garnichts aus :>

Weil dein Code falsch ist. Du legst mit "new Array" ein Array an, benutzt es aber als Objekt.

Javascript:
var
	tagObj = {},
	tagArr = [],
	allTags = document.getElementsByTagName('*');

//Die Elemente und Ihre Häufigkeit als Schlüssel/Wert Paare ins Objekt
/*
	{
		"HTML": 1,
		"DIV": 17,
		...
	}
*/
for(var i = 0; i < allTags.length; i++) {
	var name = allTags[i].tagName;
	tagObj[name] = (tagObj[name] || 0) + 1;
}

//Jetzt ein Array, dass an jeder Stelle ein Objekt hat, mit den Infos zu dem Elemente
/*
	[
		{
			"tag": "HTML",
			"count": 1
		},
		{
			"tag": "DIV",
			"count": 17
		},
		...
	]
*/
for(var k in tagObj) {
	tagArr.push({
		"tag": k,
		"count": tagObj[k]
	});
}

//Sortieren
tagArr.sort(function(a, b) {
	return a["count"] - b["count"];
});

console.log(JSON.stringify(tagObj));
console.log(JSON.stringify(tagArr));
 

Neue Beiträge

Zurück