2

わかりましたので、これは難しいことではありませんが、奇妙で奇妙なまぐれに遭遇しました。

ツリーを配列にパックしようとしています。各ノードは次のようなものです。

  • title: 表示文字列
  • キー: ID 値
  • children: 子ノードの配列

まぐれはとても奇妙で、まったく理解できません。ノードに子を追加しようとすると、次のようになります

if(node.children == undefined) {
  node.children = new Array();
}

node.children.push({ title: value, key: key });

これは、以前に挿入されたいくつかのノードを削除していました....そのため、デバッグを行ったところ、次のコードが見つかりました:

if(node.children == undefined) {
  node.children = new Array();
}

これはまったく意味がありません-node.children = new Array()は、node.childrenが未定義の場合、何も削除すべきではありません......、そうですか?

私は何か間違ったことをしていますか?もしそうなら、Javascriptでツリーを配列にパックするにはどうすればよいですか?

4

3 に答える 3

4

値の使用方法はundefined、Javascript の標準的な慣行と一致していません。これで問題が解決するかどうかはわかりませんが、コードを次のように変更してみてください

if (typeof(node.children) == 'undefined') { 
  node.children = [];
}

これは実際に役立つかもしれません。また、ご覧のとおり、Array コンストラクターを使用する必要はありませ[]ん。新しい空の配列を作成します。

Undefined は、Javascript の実際の予約語ではありません。設定を妨げるものは何もありません

undefined = 2;

その後、それとの比較は予期しない動作をします。

于 2010-02-16T00:40:18.290 に答える
1

inオペレーターを試しましたか?

if (!("children" in node))
  node.children = [];
于 2010-02-16T00:37:49.983 に答える
1

プロパティがオブジェクトに存在するかどうかを確認するには、次を使用しますhasOwnProperty

if (!node.hasOwnProperty('children')) {
    node.children = [];
}
于 2010-02-16T00:41:56.790 に答える