在 JavaScript 中存储 n-ary 树(例如:目录层次结构)的最佳方法是什么?
我需要对其进行以下操作:1.添加2.删除3更新
是否有提供此功能的 JavaScript 库?
谢谢,高拉夫
在 JavaScript 中存储 n-ary 树(例如:目录层次结构)的最佳方法是什么?
我需要对其进行以下操作:1.添加2.删除3更新
是否有提供此功能的 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
函数。
最好的方法是使用 Json(JavaScript Object Notation)将数据存储在目录层次结构中。使用 JsonEditor 类进行 CRUD 操作。