在JavaScript中存储n-ary树(例如:目录层次结构)的最佳方法是什么?
我需要对它进行以下操作: 添加 2.删除 3更新
是否有提供此功能的JavaScript库?
谢谢, 拉夫
答案 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操作。