Zwei Arrays nach den gleichen Vorgaben sortieren?

kron

Grünschnabel
Hallo,

folgende Situation, ich habe in Javascript zwei Arrays, Beispiel

var arr1 = [5,7,3,8];
var arr2 = [1,1,2,1];

Ich möchte arr1 nummerisch aufsteigend sortieren, dabei soll arr2 quasi genauso mit verändert werden. Wunschergebnis wäre also

arr1 = [3,5,7,8];
arr2 = [2,1,1,1];

Meine Idee ist bisher, die beiden Arrays zu verbinden

var arr = new Array (arr1,arr2);

und dann mit einer passenden Sortierfunktion die .sort-Methode zu nutzen, also

arr.sort(zweidimsort)

Also meine Frage hat nun drei mögliche Wege.
1. Ist meine Idee der richtige Weg für mein Vorhaben? (Wenn nicht, was ist einfacher/eleganter)?

2. Wenn ja, wie kann ich ein wie oben erzeugtes 2-dimensionales Array nach der ersten Spalte sortieren?

3. Wie kann ich das dann sortierte zweidimensionale Array wieder in die beiden originalen aufspalten?

Ich danke schon jetzt fürs Lesen und ggf. Antworten! :)
 
Zuletzt bearbeitet:
Interessantes Problem. Aber deine Herangehensweise halte ich für nicht machbar, weil eben 2. und 3. unmöglich sein wird. Die Sortierfunktion bekommt nur die beiden zu vergleichenden Elemente, aber nicht z.B. deren Index.

Aber nach ein paar Minuten grübeln hier eine mögliche Lösung: https://tinker.io/888b8/1
 
Praktisch genau meine Idee, wobei es zugegebenermaßen eleganter ist, ein Array anstelle eines Objektes zu benutzen. Aber einen eigenen Sortieralgorithmus braucht man nicht zu implementieren. https://tinker.io/888b8/2
 
Du könntest folgendes machen:
Du schreibst eine sortierfunktion (oder bekommst sie im Netz) und während du dein Array sortierst, speicherst du den ursprünglichen Index in einem zweiten Array.
Das Array alpha enthält die Werte [a,c,b] sortiert [a,b,c].
Das zweite Array numbers hat nach dem sortieren die Werte [1,3,2]
Jetzt kannst du ein beliebiges Array nehmen, und Werte in der Reihenfolge deines 1. Arrays auslesen mit
Code:
for (i=0;i<numbers.length;i++){
value=ArrayXY[numbers[i]];
}

Angenommen ArrayXY hat die Werte [f,g,h], dann würde Value mit der obigen Schleife f,h,g ausgeben.
 

Neue Beiträge

Zurück