Array sortieren nach max. 2 Kriterien
Thorsten F.
- javascript
0 Thorsten F.0 wahsaga0 Struppi
0 yetanotheruser
Hi,
habe irgendwie grade ein Brett vorm Kopf und sehe nur noch schwarz.
So, ich habe ein Array, das wie folgt aufgebaut ist:
array = (2|4|Test1,
3|3|Test2,
4|3|Test3,
4|4|Test4)
PS: Das Array wird dynamisch gebaut, es kann also sein, dass wesentlich mehr Elemente vorhanden sind.
Das möchte ich jetzt gerne so sortiert haben:
4|4|Test4,2|4|Test1,4|3|Test3,3|3|Test2
Folgendes: Es soll zuerst nach der jeweils 2. Zahl sortiert werden. Die Größte zuerst und dann abwärts. Falls wie bei Test4 und Test1 die Zahlen gleich sind, dann soll nach der 1. Zahl sortiert werden und wieder die Größte zuerst, dann abwärts.
Wie bekomme ich das am schnellsten bzw. mit dem kleinsten Aufwand hin, denn es kann ja nicht sein, dass ich zig if-Abfragen bauen muss oder?
Wäre für eine Antwort dankbar.
Grüße,
Thorsten F,.
Was vergessen:
Die verschieden Zahlen und Strings (Test1 usw.) kann ich mir in einer for-Schleife ohne Probleme mit split("|") holen. Das ist also kein Problem, mir kommt es also nur auf die Vergleichsfunktion an.
hi,
Folgendes: Es soll zuerst nach der jeweils 2. Zahl sortiert werden. Die Größte zuerst und dann abwärts. Falls wie bei Test4 und Test1 die Zahlen gleich sind, dann soll nach der 1. Zahl sortiert werden und wieder die Größte zuerst, dann abwärts.
Wie bekomme ich das am schnellsten bzw. mit dem kleinsten Aufwand hin
usort() mit selbstdefinierter Vergleichsfunktion.
gruß,
wahsaga
So, ich habe ein Array, das wie folgt aufgebaut ist:
array = (2|4|Test1,
3|3|Test2,
4|3|Test3,
4|4|Test4)
Ist das Javascript oder was?
Struppi.
So, ich habe ein Array, das wie folgt aufgebaut ist:
array = (2|4|Test1,
3|3|Test2,
4|3|Test3,
4|4|Test4)Ist das Javascript oder was?
Struppi.
Ja, das ist JS. Habe das nur array = .... geschrieben, damit man weiß, dass das ein Array ist.
Also bla[0] = 2|4|Test1
bla[1] = 3|3|Test2 usw.
Sorry, falls das mißverständlich rüberkam.
So, ich habe ein Array, das wie folgt aufgebaut ist:
array = (2|4|Test1,
3|3|Test2,
4|3|Test3,
4|4|Test4)Ist das Javascript oder was?
Struppi.
Ja, das ist JS. Habe das nur array = .... geschrieben, damit man weiß, dass das ein Array ist.
Also bla[0] = 2|4|Test1
bla[1] = 3|3|Test2 usw.Sorry, falls das mißverständlich rüberkam.
Dann müßte das Obige so aussehen:
var array = [
'2|4|Test1',
'3|3|Test2',
'4|3|Test3',
'4|4|Test4'
];
und sortieren kannst du es mit sort().
array.sort( mySort)
function mySort(a,b)
{
my a_split = a.split('|');
my b_split = b.split('|');
return a_split[1] == b_split[1] ?
a_split[0] - b_split[0]
: a_split[1] - b_split[1];
}
(ungetestet)
Struppi.
(ungetestet)
Wär wohl besser gewesen es zu tun, so geht's:
<script type="text/javascript">
var array = [
'2|4|Test1',
'3|3|Test2',
'4|3|Test3',
'4|4|Test4'
];
var new_array = array.sort( mySort)
alert(new_array.join("\n") );
function mySort(a,b)
{
var a_split = a.split('|');
var b_split = b.split('|');
return a_split[1] == b_split[1] ?
a_split[0] - b_split[0]
: a_split[1] - b_split[1];
}
</script>
Struppi.
Hi,
habe irgendwie grade ein Brett vorm Kopf und sehe nur noch schwarz.
So, ich habe ein Array, das wie folgt aufgebaut ist:
array = (2|4|Test1,
3|3|Test2,
4|3|Test3,
4|4|Test4)PS: Das Array wird dynamisch gebaut, es kann also sein, dass wesentlich mehr Elemente vorhanden sind.
Das möchte ich jetzt gerne so sortiert haben:
4|4|Test4,2|4|Test1,4|3|Test3,3|3|Test2
function bubblesort(array) {
for(var i = 0; i < array.length; i++) {
for(var j = 0; j <= array.length - i - 2; j++) {
if(array[j].split('|')[1] > array[j+1].split('|')[1]) {
a = array[j];
array[j] = array[j+1];
array[j+1] = a;
}
if(array[j].split('|')[1] == array[j+1].split('|')[1]) {
if(array[j].split('|')[0] > array[j+1].split('|')[0]) {
a = array[j];
array[j] = array[j+1];
array[j+1] = a;
}
}
}
}
return array;
}
Dat Ding ist nicht getestet oder sonderlich schnell, da kann man sicher einiges optimieren, sollte aber zumindest genug Hinweis zum Vorgehen sein.
Gruß Ben
Super!
Besten Dank. Hast mir damit eine Menge Arbeit erspart.
Hat auch auf Anhieb funktioniert.
Grüße,
Thorsten F.