Hi!
Was hast du denn erwartet? Deine Rotation ist auch eine Funktion mit mehreren Berechnungen.
Aber mit wenigen und viel leichter verständlich: Hinten eins abhacken und vorne drankleben oder vorne eins abhacken und hinten drankleben; das ist alles.
Ich würde ihr [Heike] ungern eine Lösung empfehlen, die sie/man nicht einfach durchschaut und die mit ihren offensichtlich noch recht geringen Kenntnissen nicht selbst warten kann.
Finde nicht, dass das Abhacken und Ankleben schwer zu druchschauen ist. Wenn man schon mit Arrays hantiert, sollte man wenigstens diese vier Standardmethoden kennen und verstehen. Einfacher geht's doch gar nicht.
Es geht nicht nur um diese eine Stelle sondern auch darum, wie es insgesamt aussieht. Und da musst du immer im Hinterkopf behalten, dass das Array jedes Mal anders aussieht. Beim Zähler bleibt der Inhalt dagegen stets konstant. imgs[0] ist immer das selbe Bild. Auch die anderen Array-Funktionen kannst du nicht wie gewohnt verwenden, denn du hast jetzt mit der Rotation eine neue Philosophie eingefügt, nach der sich möglichst alle anderen Codeteile richten sollten, wenn du nicht durch verschiedene Arbeitsweisen irgendwann den Überblick verlieren willst.
Findest du Modulo-Berechnungen mit if < 0 -Workarounds usw. denn leichter verständlich?
Nein, nicht im ersten Augenblick. Aber es galt, auch mit der Code-Länge dir gegenüber konkurrenzfähig zu bleiben :-) Meine ursprünglich geplante Einzeiler-Lösung mit Math.min() und .max() erwies sich dann doch nicht als geeignet, weil die nur begrenzt und nicht umbricht.
Man muss letztlich beides verstehen, das Rotationsprinzip und die Modulo-Rechnung. Wobei man Modulo-Rechnungen noch deutlich öfter begegnen wird als dem Rotationsprinzip. Der Nachteil an ihm ist auch, dass es wie die Modulo-Rechnung von außen sehr klein aussieht, aber im Gegensatz zu ihr, die immer gleich lang bleibt, wächst der im Hintergrund nötige Aufwand beim Umschichten mit jedem Element, das das Array größer wird. Bei den drei Werten ist der Unterschied zwar nicht spürbar, ...
Warum fügst du die Nummern dann nicht gleich mit einer Schleife ein, statt sie von Hand im Code zu notieren?
Weil das im OP schon vorgegeben ist und nicht das Problem von Heike. Ihr Problem ist ja nur die Ausgabe der Bildnummer. Ich bin doch hier nicht der Programmierknecht. Die fünf Zeilen entsprechend abzuändern ist schon Aufwand genug. Wie du schon sagst:
Was war denn da vorgegeben? Ein einfaches Array mit Strings als Elementen darin war da. Und dann kamst du und hast aus den Strings Objekte gemacht. Und zwar zu Fuß für jeden Wert einzeln. Das war dein Lösungsvorschlag, und er ist sowohl schnell erdacht als auch umgesetzt - bei den wenigen Werten. Aber je mehr Bilder es werden, desto aufwendiger wird es. Diese Folgewirkung wird dabei nicht berücksichtigt. Da bringt dann eine zweizeilige for-Schleife eine Einsparung in der Wartung (und auch in der Datenmenge, wenn der Array-Inhalt noch irgendwoher/-hin übertragen werden muss). Das jedoch zum Preis, dass das Array im Code betrachtet einfach aussieht, aber später dann doch komlexer anzusprechen ist.
for (var i=0; i < imgs.length; i++)
imgs[i] = {pfad: imgs[i]; nummer: i}
Damit wäre das Problem der händischen Pflege der Nummern umgangen, aber merkst du was? Je einfacher man es sich an einer Stelle macht, desto komplexer wird die Sache insgesamt.
Lo!