• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Frage Kleinste und größte Zahl aus mehrdimensionalem Array?

Willibergi

Mitglied
Moin,
ich habe folgenden Code:
Code:
            var min = 0;
            var max = 0;
            var minPos = "";
            var maxPos = "";
            for(var i=0; i<rz.length; ++i){
                for(var j=1; j<rz[i].length; ++j){
                    if(rz[i][j] < rz[i][j-1]){
                        min = rz[i][j];
                        minPos = i + " - " + j;
                    }
                    else if(rz[i][j] > rz[i][j-1]){
                        max = rz[i][j];
                        maxPos = i + " - " + j;
                    }
                }
            }
Er soll eigentlich die kleinste und die größte Zahl (und die Positionen) aus einem zweidimensionalen Array finden und sie in min und max speichern.
Ich verstehe aber leider nicht, warum der Code nicht funktioniert...
Es wird einfach irgendeine Zahl gefunden, die aber weder die größte, noch die kleinste Zahl ist.
LG Willibergi
 
Werbung:
Wie sieht denn dein Array aus? In der for- Schleife solltest du eigentlich "i++" statt "++i" benutzen, Ich bin mir nicht sicher, ob deine Version auch geht, Standard ist aber definitiv erst die Variable, dann der Operator.
 
JavaScript ist nicht PHP und anstatt mehrdimensionaler Arrays verwendet man Objekte oder eine Collection von Objekten, die wiederum key und value besitzen.

Code:
var my_obj = [
  {'my_key': 'foo', 'my_val': 42},
  {'my_key': 'bar', 'my_val': 1337}
];
//oder
var another_obj = {
  'my_key': [42,1337]
};

Schritt 1: Schreibe dein zweidimensionales Array um.
 
Werbung:
Schritt 1: Schreibe dein zweidimensionales Array um.

Sehr ungern - es muss doch eine Möglichkeit mit mehrdimensionalen Arrays geben.
Wie sieht denn dein Array aus? In der for- Schleife solltest du eigentlich "i++" statt "++i" benutzen, Ich bin mir nicht sicher, ob deine Version auch geht, Standard ist aber definitiv erst die Variable, dann der Operator.
++i funktioniert genauso - ich habe mir es so angewöhnt - ist Ansichtssache.
Ich verstehe deine Frage nach dem Array nicht ganz - es ist ein zweidimensionales Array, das davor befüllt wird.
LG Willibergi
 
i++ und ++i ist nicht das selbe

Javascript:
var i = 42;
alert(i++); // 42
alert(i); // 43
i =42;
alert(++i); // 43
alert(i); // 43
i++ erhöht die variable nach Aufruf und ++i erhöht die variable direkt

Was steht denn in rz drin?
 
Werbung:
Ich benutze nun mal die Bezeichner x und y.

Gehe ich nun einmal von diesem Array aus
Javascript:
var rz = [[1, 5], [4, 7], [3, 8], [2, 3], 
  [12, 4], [6, 6], [4, 1], [3, 2],
  [8, 14],[20, 30],[18, 23]];

Bekomme ich mit deinen Schleifen die 2 als kleinsten und die 23 als größten Wert. Ich kann dir erklären warum das so ist. Bei folgender If "if(rz[j] < rz[j-1]){" prüfst du ob y < x ist. Dies trifft bei meinem array 3 mal zu
[12, 4], [4, 1], [3, 2]

Bei der anderen if prüfst du dementsprechend ob y > x ist. Und das trifft auf folgende Werte zu
[1, 5], [4, 7], [3, 8], [2, 3], [8, 14],[20, 30],[18, 23]

Doch warum bekomm ich nun die 2 und die 23 ausgegeben. Weil es immer der letzte y Wert ist. Du überschreibst dein min und max immer bis zum letzten Wert eben.

Das kannst du auch ziemlich leicht überprüfen du musst nur in den if bedingungen ein console.log(rz[j]); ausgeben.
 
Ich benutze nun mal die Bezeichner x und y.

Gehe ich nun einmal von diesem Array aus
Javascript:
var rz = [[1, 5], [4, 7], [3, 8], [2, 3],
  [12, 4], [6, 6], [4, 1], [3, 2],
  [8, 14],[20, 30],[18, 23]];

Bekomme ich mit deinen Schleifen die 2 als kleinsten und die 23 als größten Wert. Ich kann dir erklären warum das so ist. Bei folgender If "if(rz[j] < rz[j-1]){" prüfst du ob y < x ist. Dies trifft bei meinem array 3 mal zu
[12, 4], [4, 1], [3, 2]

Bei der anderen if prüfst du dementsprechend ob y > x ist. Und das trifft auf folgende Werte zu
[1, 5], [4, 7], [3, 8], [2, 3], [8, 14],[20, 30],[18, 23]

Doch warum bekomm ich nun die 2 und die 23 ausgegeben. Weil es immer der letzte y Wert ist. Du überschreibst dein min und max immer bis zum letzten Wert eben.

Das kannst du auch ziemlich leicht überprüfen du musst nur in den if bedingungen ein console.log(rz[j]); ausgeben.
Stimmt, eigentlich ist das totaler Müll.
Aber warum eigentlich das Rad neu erfinden, wenn es so nette Leute gibt, die vordefinierte JS-Funktionen geschrieben haben... :D?
Meine neue Idee ist folgende:
Code:
var mins = [], maxs = [];
for(var i=0; i<rz.length; ++i){
     mins.push(Math.min.apply(Math, rz[i]));
     maxs.push(Math.max.apply(Math, rz[i]));
}
var min = Math.min.apply(Math, mins);
var max = Math.max.apply(Math, maxs);
Funktioniert aber - wer hätt's gedacht - wieder nicht.
Hmmmm......
 
Werbung:
WIeso funktioniert es bei dir denn nicht. Also bei meinem Array bekomme ich die 1 als kleinsten und die 30 als größten Wert wieder.
Also mit meinem Array funktioniert es.

Habe in meinem Array auch mal Werte erhöht und verkleinert und bekomme immer den kleinsten und den größten Wert wieder.
 
WIeso funktioniert es bei dir denn nicht. Also bei meinem Array bekomme ich die 1 als kleinsten und die 30 als größten Wert wieder.
Also mit meinem Array funktioniert es.

Habe in meinem Array auch mal Werte erhöht und verkleinert und bekomme immer den kleinsten und den größten Wert wieder.
Ok - dann liegt es wohl an meinem Array.
Danke!
 
Werbung:
Zurück
Oben