HTML - PHP - MySQL - SVG

KERNI's SEITE

Kleine Helferlein

Veröffentlicht am


Toggle 1 und 0

 

In vielen Bereichen muss zwischen 0 und 1 hin und her geschaltet werden. Zum Beispiel um die Farbe eine Zeile zu ändern die vorher in einem Array festgelegt wurde. In HTML sagt Ihr jetzt sicher kann man doch CSS :nth-child(odd) und :nth-child(even) verwenden. Aber nehmen wir mal an Ihr müsst eine Leiste mit Zahlen ausgeben. Am Anfang sind die Zahlen noch gut zu unterscheiden. Um so größer die Zahlen werden, um so enger wird die Lücke dazwischen. Jetzt könnte in diesem Beispiel zwar die Schriftgröße verringert werden, werden die Zahlen noch größer hilft auch das nicht mehr. Das Script muss die erste Zahl oberhalb und die zweite Zahl unterhalb der Leiste ausgeben.

 

20040060080010001200 20040060080010001200

 

Viele denken hier vielleicht an eine Schleife und eine If Klausel.

 

let str_x = 200;
let x = 18;
let y = 40;
let str = "";
 
for(let i = 0; i < obj.length; i++){
 
   str += '<text x="'+x+'" y="'+y+'">'+str_x+'</text>';
 
   if(y == 75){
      y = 40;
   }else{
      y = 75;
   }
 
   str_x += 200;
   x += 40;
}
...Ausgeben ...

 

Bei kleinen Listen die durchlaufen werden müssen ist dies kein Problem. Muss die Schleife öfter durchlaufen werden, ist eine If Abfrage durchaus langsamer. Hier eine andere Lösung für das Problem.

Wir brauchen eine zusätzliche Variable. Ich habe mir a ausgesucht und vergebe den Wert 1. 1 minus 1 ergibt 0. Beim nächsten Durchlauf hat die Variable a den Wert 0. 1 minus 0 ergibt 1 usw.
Da y zwischen 40 und 75 wechseln soll ergibt 0 * 35 + 40 gleich 40. Beim nächsten Durchlauf ist 1 * 35 + 40 gleich 75.

 

let str_x = 200;
let a = 1;
let x = 18;
let y = 0;
let str = "";
 
for(let i = 0; i < obj.length; i++){
 
   str += '<text x="'+x+'" y="'+y+'">'+str_x+'</text>';
 
   a = 1 - a;
   y = a * 35 + 40;
 
   str_x += 200;
   x += 40;
}
...Ausgeben ...

 

Ein Computer kann schneller rechnen als verleichen. Und diese Methode ist meiner Meinung nach etwas eleganter.

 

In anderen Programmiersprachen wie z.B VBA kann es nötig sein einen Boolean Wert umzudrehen. Mit:

a = -1 + a * -1

wird ein Boolean Wert umgedregt.

 

 

Wochentage: Immer das Problem mit Sonntag = 0

 

Da in Deutschland die Woche am Montag beginnt kann es nötig sein z.B. beim Aufbau eines Kalenders den Sonntag an das Ende der Liste zu setzen.

Mo Di Mi Do Fr Sa So
    1 2 3 4 5
6 7 8 9 10 11 12

 

const d = new Date("July 8, 2022");
let day = d.getDay();
 
// es sollte 5 rauskommen für den Freitag
 
const d = new Date("July 10, 2022");
let day = d.getDay();
 
// und jetzt sollte 0 rauskommen für den Sonntag

 

Wir brauchen für den Sonntag aber eine 6 wenn wir bei 0 zu zählen beginnen.

Des rätsels Lösung ist eine Division mit Rest. Wir schreiben also: Wochentag + 6 mod 7.

In Javascript wird der Modulo mit % angegeben.

 

const d = new Date("July 8, 2022");
let day = d.getDay();
let wd = day + 6 % 7
 
// Jetzt sollte der Montag bei 0 beginnen und der Sonntag 6 erhalten.

 

Wie geht das?
Der Sonntag hat als Wochentag den Wert 0. Dividiert man 0 durch 7, Ihr wisst schon, durch 0 kann man nicht dividieren. Excel spuckt #DIV/0! aus. Deshalb addieren wir 6.

Die Tabelle sollte es besser veranschaulichen.

 

Name Weekday
System
  Ergebnis
Addition
Modulo Rest
Sonntag 0 +6 = 6 mod 7 6
Montag 1 +6 = 7 mod 7 0
Dienstag 2 +6 = 8 mod 7 1
Mittwoch 3 +6 = 9 mod 7 2
Donnerstag 4 +6 = 10 mod 7 3
Freitag 5 +6 = 11 mod 7 4
Samstag 6 +6 = 12 mod 7 5