2017-09-10 31 views
1

短いバージョン、たとえば、次のような日の名前を取得する正しい方法がありますか?Javascript - "月曜日"から "月曜日"や "火曜日"などの "火"から

mon 
tue 
wed 
thu 
fri 
sat 
sun 

実際の「日付」や時刻などは必要ありません。完全な日付名の文字列が必要です。

+0

。 – Redu

+0

辞書かもしれない? 'days = {mon:" Monday "、etc ...}'のようなものなら、 'days [" mon "]'は '' Monday "'を返します。 – leaf

+0

この質問のような感じは、Code Golfing StackExchangeでよく聞かれます。 1つのJavaScriptソリューション: 'dayName = s => \' $ {s} $ {{tue: 's'、wed: 'nes'、thu: 'rs'、sat: 'ur'} [s] || '' } day \ ''(有効な曜日の省略形では大文字と小文字の違いはありませんが)。 –

答えて

8

簡単な連想配列辞書十分であろう(がオブジェクトを読み取る):次のように

var days = { 
    'mon': 'Monday', 
    'tue': 'Tuesday', 
    'wed': 'Wednesday', 
    'thu': 'Thursday', 
    'fri': 'Friday', 
    'sat': 'Saturday', 
    'sun': 'Sunday' 
} 

さて、あなたはそれらにアクセスすることができます

var day = 'mon', 
    full = days[day]; // full === 'Monday'; 
+0

いくつかの 'switch(dayNameShort):{case X:return Y}、case ...'節で関数を使用して、なぜ偽値を処理してテストを書くことができますか?私は適切な命名が良い答えの一部でなければならないと思う。なぜあなたの同胞に名前をつけないのですか?配列 'shortDayNameToLong'またはそれに類するもの?それとも、あなたは 'DayNameConverter'という親オブジェクトを持ち、' ​​DayToConnection.shortToLong [myShortDayName] 'のように' shortToLong'という名前の現在の 'days'オブジェクトを持つことができますか?ちょうどここのオプションで微妙に変化します。 – Denialos

+0

シンプルさとオーバーヘッドの間にトレードオフがあることがあります。 switch文は、関数(オーバーヘッドが追加される)と同様に、遅くなるでしょう。合理的には、i18nが必須である可能性がある場合は、より堅牢なソリューションが必要ですが、複雑さやスピードの低下を招くことなくOPの質問にうまく適合しているようです。 – BenM

+1

メイト、あなたはちょうど完全にテスト可能で手に負えない値の解決法(関数)をオーバーヘッドと呼んだのですか?真剣ですか?オーバーヘッドはありません。コードのテスト容易性とメンテナンス性が向上しました。それでおしまい。また、より柔軟でメンテナンス可能なソリューションはおそらく遅くなる可能性があります...しかし、私に聞かせてください - 誰がそのような単純なケースでパフォーマンスを気にしますか?まあ、誰も。 – Denialos

0

@BenMはすでに答えを追加しました。ただ、彼の答えを拡張し、@BenMへ

var days = { 
 
    'mon': 'Monday', 
 
    'tue': 'Tuesday', 
 
    'wed': 'Wednesday', 
 
    'thu': 'Thursday', 
 
    'fri': 'Friday', 
 
    'sat': 'Saturday', 
 
    'sun': 'Sunday' 
 
} 
 

 
var shortDays = ['mon','tue','wed','thu','fri','sat','sun']; 
 

 

 
var getFulldays = shortDays.map(function(day){ 
 
    return days[day] 
 
}) 
 

 
console.log(getFulldays) 
 

 

 

2

小さな強化はそれがよりであるため、実際にMapオブジェクトがこの仕事をしているの適切な方法で、ES6のようJSで

var Days = { 
    'mon': 'Monday', 
    'tue': 'Tuesday', 
    'wed': 'Wednesday', 
    'thu': 'Thursday', 
    'fri': 'Friday', 
    'sat': 'Saturday', 
    'sun': 'Sunday', 
    getFullName: function(day) { 
    return this[day]; 
    } 
} 

Days.getFullName("mon"); 
0

に答えますオブジェクトアクセスよりも効率的です。非常に簡単な実装は次のとおりです。例えばはい[マップオブジェクト](https://developer.mozilla.org/tr/docs/Web/JavaScript/Reference/Global_Objects/Map)

var days = new Map([["mon", 'Monday'], 
 
        ["tue", "Tuesday"], 
 
        ["wed", "Wednesday"], 
 
        ["thu", "Thursday"], 
 
        ["fri", "Friiday"], 
 
        ["sat", "Saturday"], 
 
        ["sun", "Sunday"] 
 
        ]); 
 
console.log(days.get("thu"));

+0

相対効率に関するメトリックはありますか?これははるかに読みにくいです。また、 'Map'は主に、非文字列がキーとして使用されるユースケースをサポートするために存在します。 –

+0

@Aluan Haddad [配列の重複除去](https://stackoverflow.com/a/37462984/4543207) ...地図はそれほど多くの重複がない場合には50%優れているように見えますが、この場合は重複はありません。 – Redu

+0

何も削除していないので、どのように適用されるのか分かりません。これには不必要に8つの配列オブジェクトを作成するというペナルティもあります。それは現代のVMによって最適化されるかもしれませんし、それは差をつけないかもしれません。確かなことは、これの可読性が低いことです。たぶん時代が変わり、私は過去に立ち往生していますが、これは言語の自然な表現力を捨てるような感じです。 –

関連する問題