短いバージョン、たとえば、次のような日の名前を取得する正しい方法がありますか?Javascript - "月曜日"から "月曜日"や "火曜日"などの "火"から
mon
tue
wed
thu
fri
sat
sun
実際の「日付」や時刻などは必要ありません。完全な日付名の文字列が必要です。
短いバージョン、たとえば、次のような日の名前を取得する正しい方法がありますか?Javascript - "月曜日"から "月曜日"や "火曜日"などの "火"から
mon
tue
wed
thu
fri
sat
sun
実際の「日付」や時刻などは必要ありません。完全な日付名の文字列が必要です。
簡単な連想配列辞書十分であろう(がオブジェクトを読み取る):次のように
var days = {
'mon': 'Monday',
'tue': 'Tuesday',
'wed': 'Wednesday',
'thu': 'Thursday',
'fri': 'Friday',
'sat': 'Saturday',
'sun': 'Sunday'
}
さて、あなたはそれらにアクセスすることができます
var day = 'mon',
full = days[day]; // full === 'Monday';
いくつかの 'switch(dayNameShort):{case X:return Y}、case ...'節で関数を使用して、なぜ偽値を処理してテストを書くことができますか?私は適切な命名が良い答えの一部でなければならないと思う。なぜあなたの同胞に名前をつけないのですか?配列 'shortDayNameToLong'またはそれに類するもの?それとも、あなたは 'DayNameConverter'という親オブジェクトを持ち、' DayToConnection.shortToLong [myShortDayName] 'のように' shortToLong'という名前の現在の 'days'オブジェクトを持つことができますか?ちょうどここのオプションで微妙に変化します。 – Denialos
シンプルさとオーバーヘッドの間にトレードオフがあることがあります。 switch文は、関数(オーバーヘッドが追加される)と同様に、遅くなるでしょう。合理的には、i18nが必須である可能性がある場合は、より堅牢なソリューションが必要ですが、複雑さやスピードの低下を招くことなくOPの質問にうまく適合しているようです。 – BenM
メイト、あなたはちょうど完全にテスト可能で手に負えない値の解決法(関数)をオーバーヘッドと呼んだのですか?真剣ですか?オーバーヘッドはありません。コードのテスト容易性とメンテナンス性が向上しました。それでおしまい。また、より柔軟でメンテナンス可能なソリューションはおそらく遅くなる可能性があります...しかし、私に聞かせてください - 誰がそのような単純なケースでパフォーマンスを気にしますか?まあ、誰も。 – Denialos
@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)
小さな強化はそれがよりであるため、実際に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");
に答えますオブジェクトアクセスよりも効率的です。非常に簡単な実装は次のとおりです。例えばはい[マップオブジェクト](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"));
相対効率に関するメトリックはありますか?これははるかに読みにくいです。また、 'Map'は主に、非文字列がキーとして使用されるユースケースをサポートするために存在します。 –
@Aluan Haddad [配列の重複除去](https://stackoverflow.com/a/37462984/4543207) ...地図はそれほど多くの重複がない場合には50%優れているように見えますが、この場合は重複はありません。 – Redu
何も削除していないので、どのように適用されるのか分かりません。これには不必要に8つの配列オブジェクトを作成するというペナルティもあります。それは現代のVMによって最適化されるかもしれませんし、それは差をつけないかもしれません。確かなことは、これの可読性が低いことです。たぶん時代が変わり、私は過去に立ち往生していますが、これは言語の自然な表現力を捨てるような感じです。 –
。 – Redu
辞書かもしれない? 'days = {mon:" Monday "、etc ...}'のようなものなら、 'days [" mon "]'は '' Monday "'を返します。 – leaf
この質問のような感じは、Code Golfing StackExchangeでよく聞かれます。 1つのJavaScriptソリューション: 'dayName = s => \' $ {s} $ {{tue: 's'、wed: 'nes'、thu: 'rs'、sat: 'ur'} [s] || '' } day \ ''(有効な曜日の省略形では大文字と小文字の違いはありませんが)。 –