2017-04-27 7 views
2

Ich habe eine TypeScript-Methode. Es konvertiert Integer-Werte in String-Tage. Wie kann ich diesen Code in etwas effizienteres verbessern? Irgendeine Idee?Optmise wenn sonst Bedingung javaScript

private _convertIntToStringDays(days: any){ 
     let dayArray: any = []; 
     for (let day in days){ 
      if (days[day] == 1){ 
       dayArray.push('monday'); 
      } 
      else if (days[day] == 2){ 
       dayArray.push('tuesday'); 
      } 
      else if (days[day] == 3){ 
       dayArray.push('wednesday'); 
      } 
      else if (days[day] == 4){ 
       dayArray.push('thursday'); 
      } 
      else if (days[day] == 5){ 
       dayArray.push('friday'); 
      } 
      else if (days[day] == 6){ 
       dayArray.push('saturday'); 
      } 
      else if (days[day] == 0){ 
       dayArray.push('sunday'); 
      } 
     } 
     dayArray.shift(dayArray[0]); 
     console.log(dayArray); 
     return dayArray; 
    } 
+0

Sieht eher wie Typoskript oder mir fließen ... – haim770

+0

leider seine Typoskript – blackdaemon

+0

Die Tage bin immer ist Integer-Werte – blackdaemon

Antwort

3

speichern Namen der Tage in dem Array und indizieren mit variablen

private _convertIntToStringDays(days: any) { 
     let dayArray: any = []; 
     let dayNames = ["sunday", "monday", "tuesday", "wednesday", "thursday", "friday", "saturday"]; 
     for (let day in days){ 
      dayArray.push(dayNames[days[day]]); 
     } 
     dayArray.shift(dayArray[0]); 
     console.log(dayArray); 
     return dayArray; 
} 
+2

Verwenden von 'map' wäre besser ... – Alnitak

+0

@Almitak stimme mit Ihnen überein, aber ich habe ein Beispiel nur mit den notwendigen Änderungen gegen den ursprünglichen Code zur Verfügung gestellt –

3

Haben Sie eine Lookup-Tabelle:

const dayNames = [ "Sunday", "Monday", "Tuesday", .... ] 
console.log(dayNames[1]) // gives you Monday 

[1,0,2].map(x => dayNames[x]) // converts an array of day numbers 
+1

eher 'dayNames [Tage [Tag]]' – devnull69

+0

Die OP-Funktion erwartet ein Array und gibt ein Array mit Übereinstimmungen zurück – haim770

+2

@ haim770 diese Antwort hat mehr als genug Informationen, um das Problem zu lösen, ohne Löffel es dem OP – Alnitak

4

Verwenden Array ...

function dayNumberToString(dayNumber) { 
    return ['sunday', 'monday', 'tuesday', 'wednesday', 'thursday', 'friday', 'saturday'][dayNumber % 7] 
} 
1

Genau das ist TypeScript enum s sind für.

// outside the class 
enum Day { sunday, monday, tuesday, wednesday, thursday, friday, saturday }; 

class Foo { 
    private _convertIntToStringDays(days: number[]) { 
    return days.map(day => Day[day]); 
    } 
} 

Als Referenz transpiles TS ENUM in den folgenden, so dass eine bidirektionale Lookup:

var Day; 
(function (Day) { 
    Day[Day["sunday"] = 0] = "sunday"; 
    Day[Day["monday"] = 1] = "monday"; 
    Day[Day["tuesday"] = 2] = "tuesday"; 
    Day[Day["wednesday"] = 3] = "wednesday"; 
    Day[Day["thursday"] = 4] = "thursday"; 
    Day[Day["friday"] = 5] = "friday"; 
    Day[Day["saturday"] = 6] = "saturday"; 
})(Day || (Day = {}));