1

n-ary ツリー (例: ディレクトリ階層) を JavaScript に格納する最良の方法は何ですか?

次の操作が必要です: 1. 追加 2. 削除 3 更新

この機能を提供する JavaScript ライブラリはありますか?

ありがとう、ガウラフ

4

2 に答える 2

4

JavaScript オブジェクトは基本的にキーと値のペアのマップです。つまり、私が正しく理解していれば、JavaScript オブジェクトを直接使用することができます。

たとえば、各レベルが単語のその位置の文字によってキー付けされているツリーに単語を保存するとします。

function storeWord(t, word) {
    var index, ch, entry;

    for (index = 0; index < word.length; ++index) {
        ch = word.charAt(index);
        entry = t[ch];
        if (!entry) {
            t[ch] = entry = {};
        }
        t = entry;
    }
    t.terminal = true;
}

var tree = {};
storeWord(tree, "test");
storeWord(tree, "testing");
// Results in tree looking like this:
// tree = {
//     t: {
//         e: {
//             s: {
//                 t: {
//                     terminal: true,
//                     i: {
//                         n: {
//                             g: {
//                                 terminal: true
//                             }
//                         }
//                     }
//                 }
//             }
//         }
//     }
// }

必要に応じて、エントリはツリーの次のレベルよりも複雑になる場合があります。

上記は、「追加」と「更新」の両方をカバーする保存の基本を示しています。

削除操作の場合も、データの編成方法によって異なりますが、objcct からプロパティを削除deleteするには、キーワードを使用します。最も簡単に:

var foo = {};   // A blank object
foo.bar = 42;   // Now it has a property called bar
delete foo.bar; // Now it doesn't, we've _removed_ the property entirely

したがって、単語を削除するときは、それがツリー内のターミナルで表されているかどうかを確認し、そうである場合は、ターミナルとそれにつながる空になったノードを削除します。

ノードが空かどうかを判断するには、次のような関数を使用できます。

function emptyNode(node) {
    var name;
    for (name in node) {
        if (node.hasOwnProperty(name)) { // This is optional if you're using raw objects
            return false; // Not empty
        }
    }
    return true; // Empty
}

上記を使用して、関数を構築できdeleteWordます。

于 2012-06-23T22:00:13.193 に答える
-3

ディレクトリ階層にデータを保存する最善の方法は、Json(JavaScript Object Notation) を使用することです。JsonEditor クラスを使用して CRUD 操作を行います。

チェックアウト: http://www.thomasfrank.se/json_editor.html

于 2012-06-23T21:54:09.627 に答える