n-ary ツリー (例: ディレクトリ階層) を JavaScript に格納する最良の方法は何ですか?
次の操作が必要です: 1. 追加 2. 削除 3 更新
この機能を提供する JavaScript ライブラリはありますか?
ありがとう、ガウラフ
n-ary ツリー (例: ディレクトリ階層) を JavaScript に格納する最良の方法は何ですか?
次の操作が必要です: 1. 追加 2. 削除 3 更新
この機能を提供する JavaScript ライブラリはありますか?
ありがとう、ガウラフ
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 操作を行います。