Sprung vom letzten Array Element in den Ersten?
Hallo,
ich habe folgende Funktion:
function getNextWeekday(day) {
let i = 0;
while (i < weekdays.length) {
if (day == weekdays[i]) {
console.log(weekdays[i+1]) ;
return weekdays[i+1];
}
i = i + 1
}
console.log("Error!");
return null;
}
Wenn man getNextWeekday("Monday") eingibt, wird Tuesday ausgegeben etc. Wenn ich aber Sonntag eingebe, sollte Montag herauskommen. Weiss jemand was ich an meiner Zählervariable abändern muss, damit das funktioniert?
4 Antworten
Beim Eintritt in die Funktion day in eine lokale Variable kopieren und dann mittels while()-Schleife vom Wert der Variablen 7 abziehen, bis ihr Wert kleiner als 7 ist.
Und dann natürlich nicht day sondern die lokale Variable in der Funktion verwenden.
Dazu ist eine while-Schleife ungeeignet und du solltest lieber indexOf verwenden:
const weekdays = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday'];
function getNextWeekday(day) {
let index = weekdays.indexOf(day);
if (index < 0) {
console.error('Wrong weekday');
return null;
}
index = index == weekdays.length-1 ? 0 : index+1;
return weekdays[index];
}
for (let day of weekdays) {
console.log(`Day after ${day} is ${getNextWeekday(day)}`);
}
Ausgabe
Day after Monday is Tuesday
Day after Tuesday is Wednesday
Day after Wednesday is Thursday
Day after Thursday is Friday
Day after Friday is Saturday
Day after Saturday is Sunday
Day after Sunday is Monday
Dazu ist eine while-Schleife ungeeignet und du solltest lieber indexOf verwenden
Während indexOf natürlich angenehmer zu verwenden ist, sind for- und while-Schleifen mit einer minimalen If-Abfrage beide schneller um den Index von einem Element zu finden.
Am schnellsten wäre hier ein Reversed-for-Loop.
In der Praxis kann es bei komplexen Projekten einen Unterschied machen - in diesem Fall ist es natürlich völlig wurscht.
Das wurde dir bereits beantwortet. Entweder verwendest du eine If-Abfrage oder ein Modulo.
Das bezweifle ich, das ändert Semantisch garnichts. Du solltest einen Zugriffsfehler bekommen.
Wenn du kein If verwenden darfst kannst du folgendes machen:
while(<Bedingung>){
//Your stuff
break;
}
Das entspricht einen If.
Das If durfte ich schon verwenden, nur habe ich von deiner Antwort nicht begriffen wie ich die Zählervariable jetzt abändern soll, damit eben im Falle von Sonntag auf Montag gesprungen wird..
Das haben dir ja andere beantwortet. Wenn es sich um den letzten Wochentag handelt gibst du den ersten zurück. Ansonsten den i+1-ten.
Ja entschuldige, ich checks nicht. Mache das erst seit zwei Wochen. Aber danke für deine Antwort.
In der anderen Frage hat es dir jemand ausgeschrieben. Hier unter der Frge hat Babelfish eine Lösung mit dem ?-Operator statt einem If.
ich hab in meinem Code jetzt noch
if (day == weekdays[6]) {
return weekdays [0];
}
hinzugefügt und es hat geklappt..
Ave!
return weekdays[i+1>=weekdays.length?0:i+1];
An der Zählervariable muss man theoretisch nichts ändern.
Ohne bedingte ternäre Operatoren zu verwenden, sähe das gleiche so aus:
if (day == weekdays[i]) {
if (i+1>=weekdays.length){ // Wenn i+1 größer oder gleich der Länge des Arrays ist.
console.log(weekdays[0]) ; // Gebe den Wochentag auf Platz 0 aus.
return weekdays[0];
}else{ // Andernfalls gebe den Wochentag auf Platz i+1 aus.
console.log(weekdays[i+1]) ;
return weekdays[i+1];
}
}
Ich durfte das aber nicht verwenden. Ich habe jetzt i++ statt i = i+1 eingesetzt und es hat funktioniert.