まずをクリックしてください。下の青字部分が生成されます。
ここでは、次のタイプを対象にします。このうち、""(空白)、null、undefinedをここでは特殊タイプといいます。
d(digital):null を含まない数値実施には、単独のタイプを判別するだけでなく、"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()を用いたいくつかの例を表示します。
まずをクリックしてください。以下の青字部分が生成されます。
変数のタイプには、数値、文字列、""、null、undefined などがあります。
それらを単純に大小比較すると、次の表のようになります。
x,y の軸の空白は "" です。★は大小の比較ができないという意味です。
任意の2変数の比較をする場合、それらのタイプが不明なことがあります。特に配列のソートなどをするときには特殊タイプとの比較、文字列と数値との比較が発生することがあります。そのとき、★の組み合わせになり、処理が異常終了するのが不都合なこともあります。
それを避けるために 関数 compareType() を作成しました。
オプションを省略あるいは"bottom" のときは
(小)数値<文字列<""<null<undefined(大)
"top" のときは.
(小)undefined<null<""<数値<文字列(大)
の大小関係になります。
戻り値は ">", "=", "<" のいずれかになります。
注意:この関数の中で compareType() を呼び出しています。両者を同じフォルダに置くか、 compareType()をjs指定してください。
二次元配列の元配列をソートして新配列を作ります。パラメタにより多様な処理ができます。主な特徴を掲げます。
パラメタで指定できる項目を示します。ここでは sort に"row" を指定したときの説明で、( )内は"col" を指定したときです。
パラメタ | 指定値 | 簡略 | 省略値 | 説明 |
sort | "row"|"col" | "r"|"c" | "row" | ソートして順序が変わるのが行(列)。 |
title | true|false | false | 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 }); |
二次元の元配列の指定行(列)の要素について、undefind || null → ''(変更後='')、undefind || ''l → null(変更後=null)の変換をした新配列を戻します。配列名称を与えると、別ウインドウにJS 配列名称[][] を表示します。
var 元配列 = [ [ "aaa", null, '', "" ], [ null, '', "", 14 ], [ '', 'ccc', 23 ], // [2][3] は undefined になります。 [ "", 32, , null] // [3][2] は undefined になります。 ];