特殊タイプ(undefind, null, '')要素の評価


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<""<数値<文字列(大)
の大小関係になります。
戻り値は ">", "=", "<" のいずれかになります。

(オプション省略時)


新配列 = sortArray(元配列, {key1: 1, title: true, … });

注意:この関数の中で compareType() を呼び出しています。両者を同じフォルダに置くか、 compareType()をjs指定してください。

機能説明

二次元配列の元配列をソートして新配列を作ります。パラメタにより多様な処理ができます。主な特徴を掲げます。

パラメタで指定できる項目を示します。ここでは sort に"row" を指定したときの説明で、( )内は"col" を指定したときです。

パラメタ指定値簡略省略値説明
sort"row"|"col""r"|"c""row" ソートして順序が変わるのが行(列)。
titletrue|falsefalse true とすると先頭行(列)をタイトルとしてソートの対象にしない。
first行(列)番号0|1 ソート対象最初行(列)、titleがtrueなら省略値は1
last行(列)番号配列サイズ ソート対象最後行(列)
key1列(行)番号なし(必須) ソートキー第1順位の列(行)、titleがtrueなら列名(行名)でもよい
order1"ascend"|"descend""a"|"d""a" key1での昇順(ascend)、降順(descend)
key2列(行)番号なし 省略時はソートキーが一つになる、
order2"ascend"|"descend""a"|"d""a" key2での昇順(ascend)、降順(descend)。key2指定がないときは無視
bnu"top"|"bottom""t"|"b""b" "", null, undefined の項を上にする(top)か下にするか
window配列名称なし 指定するとソート後配列を別ウインドウに 配列名称[i][j] = xxx; の形式で表示

実行例


新配列 = sortArray(元配列, {
 key1: 1,   // 列1の昇順
 window: "表" // JSリストあり
});

新配列 = sortArray(元配列, {
 title: true, // タイトル行あり
 key1: "列1", // 列名で指定
 order1: "d" // 降順ソート
});

新配列 = sortArray(元配列, {
 title: true,
 key1: 1,
 bnu: "top" // 特殊タイプを上へ
});

新配列 = sortArray(元配列, {
 title: true,
 key1: 1,
 first: 2, // 2~5行をソート対象に
 last: 5
});

新配列 = sortArray(元配列, {
 title: true,
 key1: 1, // キー個数=2
 key2: 2
});

新配列 = sortArray(元配列, {
 sort: "col", // 列をを動かす
 key1: 1, // 行1の昇順
 title: true
});



新配列 = changeArrayNullBlank(元配列, 変更後, 軸, 対象軸 [, 配列名称]);

機能

二次元の元配列の指定行(列)の要素について、undefind || null → ''(変更後='')、undefind || ''l → null(変更後=null)の変換をした新配列を戻します。配列名称を与えると、別ウインドウにJS 配列名称[][] を表示します。

サンプルデータ

     var 元配列 = [
          [ "aaa",  null,   '',  "" ],
          [  null,    '',   "",  14 ],
          [    '', 'ccc',   23      ], // [2][3] は undefined になります。
          [    "",    32,     , null]  // [3][2] は undefined になります。
    ];

実験