スタートページJavaScriptライブラリ目次

JavaScript関数ライブラリ tools.js の利用解説書


ご利用にあたって
関数一覧
  minIndex/maxIndex 最小値、最大値要素の添字
  sumExx 合計値
  fixIntDec 数値を小数点固定した文字列に変換
  normalizeScale 目盛の正規化
  decHMS/HMSdec 時分秒⇔小数 変換
  atan2PI Math.atan(y/x)の値を0≦θ<2πの範囲に変換
  typeofEx typeofの拡張。vector や mayrix などのタイプ追加
  checkType typeOf に特殊タイプも対象に
  compareType 特殊タイプも含めた2変数の大小比較
  functionLiteral 関数名をリテラルで与える
  getColor 色見本表示から色の値を得る

minIndex/maxIndex 最小値、最大値の添字
  i = minIndex(変数リスト) 最小値の添字 
  i = maxIndex(変数リスト) 最大値の添字 

変数リスト
  i = minIndex(x0, x1, x2, … , xn);   // 任意のスカラー
  i = minIndex(v);           // 1次元ベクトル
  i = minIndex(m, col);        // 2次元ベクトルの全体、または指定列

スカラー
    i = minIndex(20, 10, 20, 10);   i = 
ベクトル
  var v = [20, 10, 20, 10];
    i = minIndex(v);     i = 
マトリクス全体
    m = [ [ 0,  1,  2,  3],
          [10, 11,-12, 13],
          [20, 21, 22, 23] ];
    i =  minIndex(m);        i = 
   (該当行 * 列数 + 該当列 = 1+4+2 = 6 のようにしています。)
マトリクス列指定
    i =  minIndex(m, 2);     i = 
マトリクス行指定
  i =  minIndex(m[1]) としてベクトルになります。

合計値の計算
  sum = sumEx(x0, x1, x2, … , xn);   // 任意のスカラー
  sum = sumEx(v);           // 1次元ベクトル
  sum = sumEx(m, col);        // 2次元ベクトルの全体、または指定列

スカラー
    sum = sumEx(20, 10, 20, 10);   sum = 
ベクトル
  var v = [20, 10, 20, 10];
    sum = sumEx(v);     sum = 
マトリクス全体
    m = [ [ 0,  1,  2,  3],
          [10, 11, 12, 13],
          [20, 21, 22, 23] ];
    sum =  sumEx(m);        sum = 
マトリクス列指定
    sum =  sumEx(m, 2);     sum = 
マトリクス行指定
  sum =  sumEx(m[1]) としてベクトルになります。

数値を小数点固定した文字列に変換
  文字列 = fixIntDec(数値, 整数部桁数, 小数部桁数) 

数表作成で桁数とともに小数点位置をそろえる必要がある場合に役立ちます。
小数点があるので、全体の桁数は「整数部桁数 + 1 + 小数部桁数」になります。

    数値の小数点以下の桁数が小数部桁数より大のときは、右側を切り捨てます。
    数値の小数点以下の桁数が小数部桁数より小のときは、右側に半角空白が詰められます。
    数値の整数部桁数が指定した整数部桁数より小の場合は、左側に半角空白が詰められます。
    数値の整数部桁数が指定した整数部桁数より大の場合は、小数点の位置を右にづらします。
    数値の整数部桁数がそれより大の場合は、指数表示あるいは Infinity とします。

例示

      数値        fixIntDec(数値,4,2) 実際の半角空白を「*」で表示しています
                             // 絶対値が指定範囲のとき。小数点位置が固定される
      12               **12***
      12.0             **12***      // .0 は小数点なし整数とされる
      12.3             **12.3*
      +12.3            **12.3*      // + 符号は無視される
      -12.3            *-12.3*
      - 12.3           *-12.3*      // - 符号の後の空白は無視される
      0.12345          ***0.12
      -0.12345         **-0.12
      0.12999          ***0.12     // 指定小数点以下はカットされる(四捨五入ではない)
      0.000123         ***0.00
      123.4567         *123.45
      -123.4567        -123.45
                            // 絶対値が大のとき
      12345            12345**    // 整数部が大きいが、表現できるときは小数点を下げる
      -123456          -123456
      123456789        1.23e+8    // さらに大きいが全体の桁数で指数表示できるときは指数表示
      -123469134       -1.2e+8
      1234567890123    Infinit    // さらに大で指数表示もできない場合は Infinity とする
      -1234567890123   -Infini

テスト

数値= 整数部桁数= 小数部桁数= 文字列=(* は実際には空白)

extractParts 実数の仮数部・指数部分離
   [仮数部, 指数部] = extractParts(実数);  

実数の仮数部・指数部分離
実数 x を、仮数部を0以上1未満の実数で、先頭に0が連続しないものとし、指数部は10を基数とした正負整数としたときの、仮数部の値と、指数部の値を求める。
  例:extractParts(123.45) → [0.12345, 3]

実数 仮数部 指数部

normalizeScale 目盛の正規化
  [imin, imax, di, n] = normalizeScale(xmin, xmax, nmin, nmax)  

グラフを描画するとき、X軸の目盛りや補助線の位置を、2、5、10といったキリの良い点で決めたくなります。
ここでは、最小値(xmin)と最大値(xmax)、および、キザミの個数の最小値(nmin)と最大値(nmax)を与えて、
   for (i=imin; i<=imax; i=i+di) {
     目盛りや補助線の作成
   }
となる imin, imax, di を戻します。n はキザミの個数

di をキリの良い値にするために、nmin≦n≦. nmax にならないことがあります。

例示

        入  力      →    出  力
   xmin  xmax  nmin  nmax   imin  imax  di     n
      5       96       3       15       0       100     10     9
      -3.5    12.3     7       10       -4      14      2      8      
   50101  50203  5    11    50100  50210  10     10
   0.011  0.031  5    11    0.010  0.032  0.002  10

テスト

入力:xmin= xmax= nmin= nmax=
出力:imin= imax= di= n=

HMSdec 時分秒→小数
  dec = HMSdec(h, m, s) m, sは省略可 

decHMS 小数→時分秒
  [h, m, s] = decHMS(dec) 

時間、角度、緯度、経度など60進法で、時分秒表示と、時の小数点表示の変換をします。
全ての値は正数、時と分は整数とします。

h= m= s= dec=

Math.atan(y/x)の値を0≦θ<2πの範囲に変換 
  θ = atan2PI(x, y)

θ = atan2PI( 2, 1.732) = (1/3)π
θ = atan2PI(-2, 1.732) = (2/3)π
θ = atan2PI(-2,-1.732) = (4/3)π
θ = atan2PI(-2, 1.732) = (5/3)π
x= y=  θ=  (°)

標準機能 typeof の拡張
  タイプ = typeofEx(変数); 

標準機能の typeof では、多くのタイプが object になりますが、いくつかのタイプを追加しました。
ここでは、連想配列を対象にせず、undefind になります。、
変数 タイプ
10 'number'
[10, 20] 'vector'
[ [10, 20].
[30, 40] ]
 'matrix'
'aaa' 'string'
['aaa', 1]  'stringvector'
[['aaa', 1],
['bbb',2]]
 'stringmatrix'
'' ''
null 'null'
{"a":100, "b":"200} '{}'
new Map() 'Map'









checkType(変数, タイプ);
変数がタイプに一致すれば true, 一致しなければ false を戻す。

をクリックしてください。変化はありませんが、後述の表の作成に必要です。

関数 checkTypeの仕様

ここでは、次のタイプを対象にします。このうち、""(空白)、null、undefinedをここでは特殊タイプといいます。

  d(digital):null を含まない数値
  s(string):""を含まない文字列
  b(blank):""(空白)
  n(null):null
  u(undefined):undefined

実施には、単独のタイプを判別するだけでなく、"bnu"(特殊タイプか否か、"sb"(""を含む文字列か)など組合せによる判別が必要になることがあります。checkType()はそれをまとめたものです。内容は比較的シンプルです。

    function(変数, タイプ) {
        if (タイプ == "u")   return (変数 === undefined);
        if (タイプ == "b")   return ( (変数 == '') && (typeof 変数 == 'string') );
        if (タイプ == "n")   return ( (変数 == null) && (typeof 変数  == 'object') );
        if (タイプ == "bu")  return ( (変数 === undefined) || (変数 == '') && (typeof 変数 == 'string') );
        if (タイプ == "nu")  return (変数 == null);
        if (タイプ == "bnu") return ( (変数 == null) || (変数 == '') && (typeof 変数 == 'string') );
        if (タイプ == "s")   return ( isNaN(変数) && (typeof 変数 == 'string') );
        if (タイプ == "sb")  return (typeof 変数 == 'string');
        if (タイプ == "d")   return ( (typeof 変数 == 'number') && !isNaN(変数) );
        if (タイプ == "dn")  return ( (typeof 変数 == 'object') || (typeof 変数 == 'number') && !isNaN(変数) );
    };

変数xのタイプがtypeならば true を、そうでなければ false を戻します。
   if (checkType(x, "bu"))
では、x が "" あるいは undefind のときは true、そうでないときは faise を戻します。

解説:特殊タイプの特徴

ここでは、undefined, null, ""(空白)を「特殊タイプ」といいます。

ここでは次のデータ
   var x = [];
   x[0] = ""; x[1] = null; x[2] = undefined; x[3] = NaN; x[4] = 0; x[5] = "5"; x[6] = "a";
を用います。

x[2] = undefined; を記述しないと undefined になります。
また、次のように記述できます。
   x = ["", null, , NaN, 0, "5", "a"];
このとき、「,」だけの項は undefined になります。
また、x[2] = ; とすると文法エラーになります。

これらの違いを理解していないと、思わぬトラブルが発生します。

基本的な判別機能

x が "" であるかを判別するには、if (x == "") のようにすればよいように思いますが、下表のように x=0 も含まれてしまいます。また、Javascript には isMaN(x) や typeof などの関数があります。しかし、次のように、単純にはいかないのです。

正しく識別するための記述

例えば、x が ””であり、null や undefined などではないことを判別するには、次の「条件」に示すような記述が必要になります。

上の「条件」をまとめて関数にしたのが checkType() です。 checkType()を用いたいくつかの例を表示します。


">" | "=" | "<" = compareType(x, y [, "top"|"bottom"]);

をクリックしてください。変化はありませんが後述の表の作成に必要です、

変数タイプと大小比較

変数のタイプには、数値、文字列、""、null、undefined などがあります。
それらを単純に大小比較すると、次の表のようになります。
x,y の軸の空白は "" です。★は大小の比較ができないという意味です。

関数 compareType(x,y [, "top"|"bottom"])

任意の2変数の比較をする場合、それらのタイプが不明なことがあります。特に配列のソートなどをするときには特殊タイプとの比較、文字列と数値との比較が発生することがあります。そのとき、★の組み合わせになり、処理が異常終了するのが不都合なこともあります。

それを避けるために 関数 compareType() を作成しました。
オプションを省略あるいは"bottom" のときは
   (小)数値<文字列<""<null<undefined(大)
"top" のときは.
   (小)undefined<null<""<数値<文字列(大)
の大小関係になります。
戻り値は ">", "=", "<" のいずれかになります。


functionLiteral(関数名[, 引数1, 引数2, ・・・]); 関数名をリテラルで与える

一般形は functionLiteral(関数名[, 引数1, 引数2, ・・・]); (引数個数≦10)です。
  関数名(引数1, 引数2, ・・・) と同じことになります。

<script>
function functionLiteral0(){
    document.getElementById("functionLiteral結果表示場所").innerHTML
        = "functionLiteral0";
}
function functionLiteral2(引数1, 引数2){
    document.getElementById("functionLiteral結果表示場所").innerHTML
        = "functionLiteral2:引数1=" + 引数1 + ", 引数2=" + 引数2;
}
</script>

<button onClick="functionLiteral('functionLiteral2',100,'aaa')">実行</button>
<div id="functionLiteral結果表示場所"></div>
</script>

引数なし
2個の引数

↓ <div id="functionLiteral結果表示場所"></div>

参考URL

「可変個引数」「リンク:location.hrefとwindow.open」


getColor(色見本表示場所);

一覧表の左側に標準16色と原色の透明度別の色、右側にはセーフカラーの透明度1の色が掲げられています。
色セルをクリックすると、左下に、その色の拡大図と rgba形式名称が表示されます。

実際のソースコードには、getColor の直後にある付帯関数 getColorClick(), getColorChange() が必要になります。

操作方法などは getColor.htmlを参照してください。