Mehrdimensionales Array sortieren - Problem mit Internet Explorer

deb_ugger

Erfahrenes Mitglied
Hallo!

Ich gebe dynamisch die Inhalte meines Array aus. z.B. möchte ich alle Projekte von "CompanyB" sortiert nach der Priorität ausgeben. In der Reihenfolge: TOP, Prio 1, Prio 2, Prio 3.

In Firefox kein Problem (bis auf die Kleinigkeit, dass TOP am Ende und nicht am Anfang angezeigt wird). Im Internet Explorer funktioniert das Sortieren aber scheints überhaupt nicht. Was mache ich falsch? Hier der Code:

Code:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>Sort</title>
<script language="javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.4.4/jquery.min.js"></script>
<script>

var Projects =  [];

jQuery(function() {
	Projects["CompanyA"] = [];
	Projects["CompanyA"].push(
		{title: "ProjectA1", priority: "TOP"},
		{title: "ProjectA2", priority: "Prio 3"},
		{title: "ProjectA3", priority: "Prio 2"}
	);
	
	Projects["CompanyB"] = [];
	Projects["CompanyB"].push(
		{title: "ProjectB1", priority: "Prio 1"},
		{title: "ProjectB2", priority: "TOP"},
		{title: "ProjectB3", priority: "Prio 2"},
		{title: "ProjectB4", priority: "Prio 3"},
		{title: "ProjectB5", priority: "Prio 1"}
	);
	
	Projects["CompanyC"] = [];
	Projects["CompanyC"].push(
		{title: "ProjectC1", priority: "Prio 3"},
		{title: "ProjectC2", priority: "Prio 3"},
		{title: "ProjectC3", priority: "Prio 2"},
		{title: "ProjectC4", priority: "TOP"}
	);
	
	// Output unsorted
	for (i in Projects["CompanyB"]) { 
		$('#output').append('   ' + i + ': ' + Projects["CompanyB"][i].priority + '<br />');
	}

	// Sort...
	Projects["CompanyB"] = Projects["CompanyB"].sort(function (a, b) {
		return a.priority > b.priority;
	});
	
	// Output sorted
	$('#output').append('<br /> ---- sorted --- <br />');
	for (i in Projects["CompanyB"]) { 
		$('#output').append('   ' + i + ': ' + Projects["CompanyB"][i].priority + '<br />');
	}
	
});
</script>

</head>

<body>
<div id="output" style="width:300px; height: 500px; border: 1px solid #ccc"></div>
</body>
</html>

Danke für die Hilfe!

Grüßle
 
Also erstmal:

(bis auf die Kleinigkeit, dass TOP am Ende und nicht am Anfang angezeigt wird)

Es geht A,B,C,D,.....O,P,Q,R,S,T,U,...
Also ist das völlig korrekt.


Jetzt zum Problem:
Die Funktion muss einen Zahlenwert zurückliefern, der angibt, welcher Wert größer ist. Denn es handelt sich ja um eine dreiwertige Logik (kleiner, größer, gleich), die sich mit true/false nicht abbilden lässt.

Javascript:
Projects["CompanyB"] = Projects["CompanyB"].sort(function (a, b) {
	if(a.priority === b.priority)
		return 0;
	
	if(a.priority > b.priority)
		return 1;
	
	return -1;
});

Edit: Noch zwei Sachen
1. Gib beim Script-Tag immer das Attribut "type" mit dem Wert "text/javascript" an. Das language Attribut ist veraltet.

2. "var Projects = [];" sollte "var Projects = {};" heißen, weil du es als Objekt benutzt und nicht als Array.
 
Zuletzt bearbeitet:
Zurück