スタック・オーバーフロー Asked by user37282 on January 6, 2022
明けまして、おめでとうございます。
早速質問ですが、
下記のコードは、元号の1桁の年数(2~9年)を”全角”で表示させたものですが、
もっと効率的な書き方がありましたら、ご教示ください。
<SCRIPT type="text/javascript">
<!--
function newYear(){
var now = new Date();
var Wareki = now.toLocaleDateString("ja-JP-u-ca-japanese", { era: "long", year:"numeric" }).
replace("年", "").
replace(/(^|[^d])1(?=$|[^d])/, '$1元').replace(/(^|[^d])2(?=$|[^d])/, '$12').replace(/(^|[^d])3(?=$|[^d])/, '$13').
replace(/(^|[^d])4(?=$|[^d])/, '$14').replace(/(^|[^d])5(?=$|[^d])/, '$15').replace(/(^|[^d])6(?=$|[^d])/, '$16').
replace(/(^|[^d])7(?=$|[^d])/, '$17').replace(/(^|[^d])8(?=$|[^d])/, '$18').replace(/(^|[^d])9(?=$|[^d])/, '$19').
replace(/u200e/g, "").
replace(" ", "");
var txtReki = Wareki + "年 ";
document.getElementById('newYear').innerHTML=txtReki;
window.setTimeout("newYear()",1000);
}
window.onload=newYear;
//-->
</script>
<BODY>
<p id='newYear'></p>
どのような書き方を「効率的」と考えておられるのかよくわからないのですが、「数字の全角変換」だけを別関数にしておくと、「ほとんど同じコードの繰り返し」は、解消することができます。
function toZenDigits(str) {
var result = "";
for( var i = 0; i < str.length; ++i ) {
var ch = str.charCodeAt(i);
if( 0x0030 <= ch && ch <= 0x0039 ) {
ch = ch - 0x0030 + 0xFF10;
}
result += String.fromCharCode(ch);
}
return result;
}
function newYear(){
var now = new Date();
var wareki = now.toLocaleDateString("ja-JP-u-ca-japanese", { era: "long", year:"numeric" })
.replace("年", "")
.replace(/(^|[^d])1(?=$|[^d])/, '$1元')
.replace(/(^|[^d])([2-9])(?=$|[^d])/, function(whole, era, year) {return era + toZenDigits(year);})
.replace(/u200e/g, "")
.replace(" ", "");
var txtReki = wareki + "年 ";
document.getElementById('newYear').innerHTML=txtReki;
window.setTimeout("newYear()",1000);
}
window.onload=newYear;
<span id="newYear"></span>
もうちょっとモダンな書き方、タイプ量が少ない書き方なんかはありそうですが、「ほとんど同じコードの繰り返し」を解消すると言うのとは別の話になるので、この辺にしておきます。
Answered by OOPer on January 6, 2022
Get help from others!
Recent Answers
Recent Questions
© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP