JavaScript中的n-ary树

时间:2012-06-23 21:49:18

标签: javascript data-structures

在JavaScript中存储n-ary树(例如:目录层次结构)的最佳方法是什么?

我需要对它进行以下操作: 添加 2.删除 3更新

是否有提供此功能的JavaScript库?

谢谢, 拉夫

2 个答案:

答案 0 :(得分:4)

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
//                             }
//                         }
//                     }
//                 }
//             }
//         }
//     }
// }

根据您的需要,您的条目可能比仅仅是树的下一级更复杂。

以上显示了存储的基础知识,包括“添加”和“更新”。

对于删除操作,再次取决于数据的组织方式,但是从对象中删除属性,则使用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函数。

答案 1 :(得分:-2)

最好的方法是在目录层次结构中存储数据是使用Json(JavaScript Object Notation)。使用Json Editor类进行CRUD操作。

结帐:http://www.thomasfrank.se/json_editor.html