師匠の散歩Grandmaster Wander

JavaScriptのかけら7

よく使うメソッド

JavaScriptでは、変数のあとにドットと文字列をつけて、特有の操作をすることができます。ここではメソッドで使い勝手のよさそうなものを掲載します。

  1. toFixed、小数点四捨五入
  2. length、文字数を調べる
  3. split,切断
  4. indexOf、場所検索
  5. match、存在確認
  6. subStr,subString,slice、切り取り
  7. replace、置き換え

toFixed、小数点

Javascriptで用意されている関数round()floor()は実数を整数にする関数です。

しかし、科学計算では特定の小数点位置で四捨五入する使い方が多く、これを実現するのが.toFixed()です。

var a=3.55555555555555555;
var b=3.44444444444444444;
var c= -10.55555, d = -10.44444
document.write("4桁で a = " + a.toFixed(4)+"\n");
document.write("6桁で b = " + b.toFixed(6)+"\n");
document.write("マイナスで c = " + c.toFixed(3)+"\n");
document.write("マイナスで d = " + d.toFixed(3)+"\n");
  1. メソッドの「toFixed」は大文字・小文字が異なるとエラーとなります。
  2. .toFixed()は、絶対値に対して桁数で四捨五入し、次に元の正負号をつける仕様のようです(JIS Z 8401)。

length、文字数を調べる

var moji1="令和元年";
var moji2="20190501";
var moji3="令和元年1月";
document.write(moji1 + "="+ moji1.length+"\n");
document.write(moji2 + "="+ moji2.length+"\n");
document.write(moji3 + "="+ moji3.length+"\n");
var xyArray=[ 1,2,3,4,5,6 ];
document.write( "xyArrayの個数 ="+ xyArray.length+"\n");
var multi = [ [1,2,3],[4,5,6],[7,8,9],[10,11,12] ];
document.write( "multiの個数 =" + multi.length + " * " + multi[0].length +" = " + multi.length * multi[0].length + "\n");
var renHash = { "a":1,"b":2,"c":3 }
document.write( "renHashの個数 =" + Object.keys(renHash).length  + "\n");

.lengthは、2バイト文字も1バイト文字も1文字で計算します。

ところで、2バイト文字と1バイト文字全体を、1バイト文字の長さの文字列にしたいときが、たま〜に発生します。そんな方法のレシピがありましたので、ここでも参照させてもらいます。

var moji3="令和元年1月";
  var len = 0;
  var str = escape(moji3);
  for (var i=0 ; i < str.length ; i++,len++) {
    if ( str.charAt(i) == "%" ) {
      if ( str.charAt(++i) == "u" ) {
        i += 3;
        len++;
      }
      i++;
    }
  }
document.write("元文字:"+ moji3 + " / 文字数="+ moji3.length + " / 半角換算文字数=" + len+"\n");

参照先はプロクシチェックがかかるので、こちらをリンクしておきます。

切断

CSVファイルを読み込んで、行データをカンマで切断して配列に格納する、という方法をよく使います。

var mes="日本,富士山,2020,令和,3.14159";
var mesArray = mes.split(",");
for(var i=0; i< mesArray.length; i++){
document.write( i + "/ " + mesArray[i] + "\n")
}

.indexOf():文字列検索

所定の文字列の先頭が、元の文字列の先頭から数えて何番目の文字の位置にあるのかを返す。最初の位置だと「0」が返るのに注意。

2バイト文字と1バイト文字が混合しても「文字数」が返されるので、「全て1バイト文字としたのと同じ位置」を求めるような場合は、「2バイト文字の文字数×2+1バイト文字の文字数」を計算する必要がある。

var mes="abcdABCD";
var search ="A";
document.write( mes + " .indexOf("+search+") -> " + mes.indexOf(search) +"\n");
var mes="abcABCabcABCabcABC";
var search ="ABC";
document.write( mes + " .indexOf("+search+") -> " + mes.indexOf(search) +"\n");
var mes="令和二年2020東京オリンピック";
var search ="東京";
document.write( mes + " .indexOf("+search+") -> " + mes.indexOf(search) +"\n");
var mes="令和二年2020東京オリンピック";
var search ="元年";
document.write( mes + " .indexOf("+search+") -> " + mes.indexOf(search) +"\n");

.match():マッチ

Perlを知っていると「マッチ」という単語がすんなり理解できると思います。文字列を含んでいれば返り値は文字列を、なければ「null」を返します。

JavaScriptでは、マッチした文字列が複数の場合は、戻り値が配列となります。

var mes="abcdABCDabcdABCD"  
var search ="A";
document.write( mes + " .match("+search+") -> " + mes.match(search) +"\n");
var mes="abcdABCDabcdABCD";
var search =/A/g;
document.write( mes + " .match("+search+") -> " + mes.match(search) +"\n");
var mes="abcdABCDabcdABCD"
var search =/[A-C]/gi;
var mes="abcdABCDabcdABCD"
document.write( mes + " .match("+search+") -> " + mes.match(search) +"\n");

String subStr,slice

文字列のうち、特定の文字位置を取り出します。大きさが逆だったり負の数だったりする場合は、挙動不審となりますのでご注意ください(ネットで調べてください)。

var mes="abcdABCDabcdABCD";
document.write( mes + " .substring(3,5) -> " + mes.substring(3,5) + " // 文字のn番目からm番目までを取り出す" +"\n");
document.write( mes + " .slice(3,5)    -> " + mes.slice(3,5) +      " // 文字のn番目からm番目までを取り出す" +"\n");
document.write( mes + " .substr(3,5)    -> " + mes.substr(3,5) +    " // 文字のn番目からm文字を取り出す" +"\n");
mes = "2019令和元年2";
document.write( mes + " .substr(3,2)    -> " + mes.substr(3,2) +    " // 文字のn番目からm文字を取り出す" +"\n");
document.write( mes + " .substr(3)    -> " + mes.substr(3) +        " // 文字のn番目から最後まで" +"\n");
//document.write( mes + " .substr(,2)    -> " + mes.substr(,2) +"\n");    // 文字のn番目からm文字を取り出す" +"\n");

replace、置き換え

文字列の置き換えはでは正規表現と合わせて使うと便利なようです。

.replace()を重ねて利用ができ、左から順番に実行されていくようです。

mes = "2019令和元年2020";
document.write( mes + " .replace('令和','平成')    -> " + mes.replace("令和","平成")  +    " // 置き換え" +"\n");
document.write( mes + " .replace('20','19')    -> " + mes.replace("20","19")  +    " // 最初だけが置き換え" +"\n");
document.write( mes + " .replace(/20/,'19')    -> " + mes.replace(/20/,"19")  +    " // 最初だけが置き換え" +"\n");
document.write( mes + " .replace(/20/g,'19')    -> " + mes.replace(/20/g,"19")  +    " // 全て置き換え" +"\n");
document.write( mes + " .replace(/20/g,'19').replace(/19/g,'33')    -> " + mes.replace(/20/g,"19").replace(/19/g,"33")  +    " // 全て置き換え" +"\n");

Topに戻る // 一覧に戻る
Copyright(C) Grandmaster since 2010 最終更新:20120/2/6