Jintrick.netagenda2003年09月アーカイブ → 2003年09月01日

名前空間を汚さない再帰処理(JScript)

DOMインターフェイス等を使ってXMLノードツリーのちょっとした検索をする場合に、無駄な変数の宣言を避け、その検索にのみ使用する変数を全て、その検索処理を行う関数の外部からは参照できない局所変数にし、さらにその関数自体も無名関数を使ってみようという試みです。

簡便化の為、XMLノードツリーは擬似的に単なる配列(Arrayオブジェクト)にして例示します。

var ary = [0, [1, 1, [2, 'it', [3,3]]]];

このような配列内において、唯一String型になっているアイテムを変数itに代入することを目的とします。更に、変数it以外は同じスコープから参照不可能になるように工夫します。

var it = function(_ary){
    for(var i = 0, obj, len = _ary.length; i < len; i++)
    {
        obj = _ary[i];
        
        switch(obj.constructor)
        {
            case String :
                return obj;
                break;
            case Array  :
                return arguments.callee(obj);
                break;
            default     :
                break;
        }
    }
}(ary);

alert(it); // it

変数itに無名関数の戻り値を代入し、その無名関数の中で自分自身(arguments.callee)を呼び出して再帰処理を行っています。

この例における配列はノードリストに、また、配列のアイテムはノードに、そしてconstructorプロパティはnodeType等判別に使用したいプロパティ等に置き換えて使用します。その際にはもう少しややこしくなりますが、考え方は同じです。


webmaster@jintrick.net
公開: 2003年09月01日
カテゴリ: DOM ,Javascript