Sprung vom letzten Array Element in den Ersten?

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
Woher ich das weiß:Berufserfahrung – Entwickle Webseiten seit über 25 Jahren.
MagisterSamael  11.11.2023, 18:37
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.

0

Das wurde dir bereits beantwortet. Entweder verwendest du eine If-Abfrage oder ein Modulo.

lenamaur23 
Fragesteller
 11.11.2023, 16:42

Ich durfte das aber nicht verwenden. Ich habe jetzt i++ statt i = i+1 eingesetzt und es hat funktioniert.

0
Destranix  11.11.2023, 16:45
@lenamaur23

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.

1
lenamaur23 
Fragesteller
 11.11.2023, 18:03
@Destranix

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..

0
Destranix  11.11.2023, 18:09
@lenamaur23

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.

1
lenamaur23 
Fragesteller
 11.11.2023, 18:13
@Destranix

Ja entschuldige, ich checks nicht. Mache das erst seit zwei Wochen. Aber danke für deine Antwort.

0
Destranix  11.11.2023, 18:18
@lenamaur23

In der anderen Frage hat es dir jemand ausgeschrieben. Hier unter der Frge hat Babelfish eine Lösung mit dem ?-Operator statt einem If.

0
lenamaur23 
Fragesteller
 11.11.2023, 18:20
@Destranix

ich hab in meinem Code jetzt noch

if (day == weekdays[6]) {

return weekdays [0];

}

hinzugefügt und es hat geklappt..

1

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]; 
    }
}