PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : JavaScript: Vergleich zweidimensionale Arrays


Sternenkind
2005-05-27, 22:47:48
HI,
ich hab ein Problem mit den lieben Arrays. Und zwar möchte ich (zweidimensionale) Arrays vergleichen und komm überhaupt nicht klar. Während in der "Aufgabe" (mit angabe de zweiten "Spalte") problemlos funzt, klappt das beim "Sortieren" überhaupt nicht. Hier funzt nur x[i] also ohne die zweite "Spalte", gleiches gilt für die Variable "X". Ich steig da nicht dahinter, vielleicht kann mir wer ein wenig auf die Sprünge helfen... ich bin schon zahlreiche Seiten im Netz durchgegangen aber bisher hat nix geholfen.


var a = new Array();

a[0] = new Array();
a[0][0] = 'Hund';
a[0][1] = 100;
a[0][2] = 50;
a[0][3] = 80;
a[0][4] = 90;
a[0][5] = 500;

a[1] = new Array();
a[1][0] = 'Katze';
a[1][1] = 85;
a[1][2] = 70;
a[1][3] = 70;
a[1][4] = 75;
a[1][5] = 150;
.
.
.

function vergleich(x,y) //Sortierfunktion
{
if(x[i][5]<y[i][5]){res=-1}
else if(y[i][5]<x[i][5]){res=1}
else{res=0}
return(res);
}

var X = a[i][5].sort(vergleich);


for (i in a) //Ausgabe
{
alert(a[i][0]+" "+X);
}

Sephiroth
2005-05-28, 02:58:05
HI,
ich hab ein Problem mit den lieben Arrays. Und zwar möchte ich (zweidimensionale) Arrays vergleichen und komm überhaupt nicht klar. Während in der "Aufgabe" (mit angabe de zweiten "Spalte") problemlos funzt, klappt das beim "Sortieren" überhaupt nicht. Hier funzt nur x[i] also ohne die zweite "Spalte", gleiches gilt für die Variable "X". Ich steig da nicht dahinter, vielleicht kann mir wer ein wenig auf die Sprünge helfen... ich bin schon zahlreiche Seiten im Netz durchgegangen aber bisher hat nix geholfen.


var a = new Array();

a[0] = new Array();
a[0][0] = 'Hund';
a[0][1] = 100;
a[0][2] = 50;
a[0][3] = 80;
a[0][4] = 90;
a[0][5] = 500;

a[1] = new Array();
a[1][0] = 'Katze';
a[1][1] = 85;
a[1][2] = 70;
a[1][3] = 70;
a[1][4] = 75;
a[1][5] = 150;
.
.
.

function vergleich(x,y) //Sortierfunktion
{
if(x[i][5]<y[i][5]){res=-1}
else if(y[i][5]<x[i][5]){res=1}
else{res=0}
return(res);
}

var X = a[i][5].sort(vergleich);


for (i in a) //Ausgabe
{
alert(a[i][0]+" "+X);
}



Sort muß auf ein Array ausgeführt werden.
var X = a[i][5].sort(vergleich);
a[i][5] ist kein Array sondern ein einfaches Element. Daher kann das, was du da stehen hast gar nicht gehen. Deine x und x in der Vergleichs-Funktion sind gar keine Arrays und daher wird sie immer 0 zurückgeben und es wird nix sortiert.

Wenn ich dich richtig verstanden habe, dann willst du immer die Arrays in der 2. Dimension sortieren.
Das sieht dann so aus:


var a = new Array();

a[0] = new Array();
a[0][0] = 'Hund';
a[0][1] = 100;
a[0][2] = 50;
a[0][3] = 80;
a[0][4] = 90;
a[0][5] = 500;

a[1] = new Array();
a[1][0] = 'Katze';
a[1][1] = 85;
a[1][2] = 70;
a[1][3] = 70;
a[1][4] = 75;
a[1][5] = 150;
.
.
.

function vergleich(x,y) //Sortierfunktion
{
if(x<y){res=-1}
else if(y<x){res=1}
else{res=0}
return(res);
}

for (i in a) //Ausgabe
{
var X = a[i].sort(vergleich);
alert(a[i][0]+" "+X);
}

da sollte dann sowas rauskommen:
Hund Hund,50,80,90,100,500
Katze Katze,70,70,75,85,150

Sternenkind
2005-05-28, 12:41:53
Danke für die Antwort!

da sollte dann sowas rauskommen:
Zitat:
Hund Hund,50,80,90,100,500
Katze Katze,70,70,75,85,150

Ja eben genau DAS bekomm ich maximal raus. Ich möchte allerdings z.B. nur den letzten Wert von 'Hund' (500) und 'Katze' (150) vergleichen! Wie bekomm ich das hin? Einfach a[i][5] funzt ja nun gar nicht!

Sephiroth
2005-05-28, 14:57:12
Danke für die Antwort!
Ja eben genau DAS bekomm ich maximal raus. Ich möchte allerdings z.B. nur den letzten Wert von 'Hund' (500) und 'Katze' (150) vergleichen! Wie bekomm ich das hin? Einfach a[i][5] funzt ja nun gar nicht!
hm, meinst Du so?
var a = new Array();
a[0] = ['Hund',100,50,50,90,500];
a[1] = ['Katze',85,70,70,75,150];

function vergleich1(x,y) {
if(x<y) {
res=-1;
}else if(y<x) {
res=1;
}else {
res=0;
}
return(res);
}

function vergleich2(x,y) {
if(x[5]<y[5]) {
res=-1;
}else if(y[5]<x[5]) {
res=1;
}else {
res=0;
}
return(res);
}

for (i in a) {
X = a[i].sort(vergleich1);
WScript.Echo(a[i][0]+" "+X);
}
WScript.Echo("\n");
var Y = a.sort(vergleich2);
WScript.Echo(Y);
Ausgabe:
Hund Hund,50,50,90,100,500
Katze Katze,70,70,75,85,150

Katze,70,70,75,85,150,Hund,50,50,90,100,500

Anstelle von WScript.Echo mußt du eben alert nehmen, wenn du es nicht unter Windows über WSH testen willst.

Sternenkind
2005-05-28, 16:13:25
Ne so mein ich das nicht ;)
Ok also angenommen a[i][5] wäre der Preis für 'Hund' und 'Katze' und möchte die Tiere nach ihren Preis sortieren... wie stell ich das an!? Deswegen habe 2d Arrays genutzt um z.B. a[0] ist als 'Hund' und a[1] als 'Katze' darzustellen. a[0][0..5] sind die Eigentschaften zum 'Hund', diese möchte ich mit a[1][1..5], den Eigenschaften von 'Katze', vergleichen.

Ich hoffe ich kann mich irgendwie verständlich machen! Vielleicht funzt das was ich will auch gar nicht mit 2d Arrays, was gibts dnan für Möglichkeiten?

Sephiroth
2005-05-28, 16:57:37
ah, ich glaub ich versteh dich nun. es soll dann in etwa so aus sehen - richtig?
Hund, 50
Hund, 50
Katze, 70
Katze, 70
Katze, 75
Katze, 85
Hund, 90
Hund, 100
Katze, 150
Hund, 500

das ginge z.B. so:

var b = new Array();
b[0] = [500,'Hund'];
b[1] = [50,'Hund'];
b[2] = [70,'Katze'];
b[3] = [50,'Hund'];
b[4] = [70,'Katze'];
b[5] = [150,'Katze'];
b[6] = [85,'Katze'];
b[7] = [100,'Hund'];
b[8] = [75,'Katze'];
b[9] = [90,'Hund'];
/* oder auch
b = [[500,'Hund'], [50,'Hund'], [70,'Katze'], [50,'Hund'], [70,'Katze'],
[150,'Katze'], [85,'Katze'], [100,'Hund'], [75,'Katze'], [90,'Hund']];
*/

function vergleich3(x,y) {
if(x[0]<y[0]) {
res=-1
}else if(y[0]<x[0]) {
res=1
}else {
res=0
}
return(res);
}

b.sort(vergleich3);
WScript.Echo(b);
Ausgabe:
50,Hund,50,Hund,70,Katze,70,Katze,75,Katze,85,Katze,90,Hund,100,Hund,150,Katze,5 00,Hund

Sternenkind
2005-05-28, 17:45:50
genau sowas in der art! allerdings möchte ich 'hund' und 'katze' mehr variablen zuweisen und die ggf. vergleichen...funzt denn dann deine vergleichsfunktion auch?

Sephiroth
2005-05-28, 17:54:22
Du müsstest dann für die anderen Vergleichsmerkmale eine neue Funktion schreiben, bei der du dann eben den Index (da oben 0) entsprechenden änderst.
z.b.
function vergleich4(x,y) {
if(x[2]<y[2]) {
res=-1;
}else if(y[2]<x[2]) {
res=1;
}else {
res=0;
}
return(res);
}
Wenn jetzt b[i] die Gestalt [90,'Hund',foo] hat und foo eine Zahl ist (wofür auch immer die stehen soll).
Und wenn dann danach sortiert werden soll, mußt du diese Funktion angeben.

Sternenkind
2005-05-29, 14:36:36
So jetzt habe ich nur noch ein Problemchen: ich möchte einen Wert in allen Arrays mit dem Wert X vergleichen.

Also:

var X = 500

for (i in a)
{
a[i][5] <= X
...?
}

Ich möchte also wissen wieviel 'Tiere' weniger als "500" € kosten. Irgendwie komm ich nur raus welche 'Tiere' weniger als 500 €kosten aber ned wieviel...ich brauch halt die Anzahl in einer Variable.

darph
2005-05-29, 15:47:52
var X = 500
var zaehler = 0

for (i in a)
{
if(a[i][5] <= X)
{
zaehler++;
}
}