gorogoronyan FC2

JavaScript: ツリー構造のデータを扱う (1)

ツリー構造をもつデータの例

ツリー構造をもつデータはさまざまな場面で出てきます。

例: ファイルシステムのフォルダ
例: ファイルシステムのフォルダ
例: 文書の目次、アプリケーションのメニュー項目など
例: 文書の目次、アプリケーションのメニュー項目など
例: 将棋や囲碁などの手のデータ
例: 将棋や囲碁などの手のデータ

ノードのクラスを作る

ノードのデータを格納する データモデル (model) についての話です。 GUI 上で操作する ビュー (view) の話ではありません。

例: ツリーノード
例: ツリーノード

ノードのクラス

class Node {
    constructor(){
        this.properties = {};   //ノードに関するデータを格納する連想配列。
        this.nodelist = [];     //子の Node を格納する配列。
    }
}
◎補足:

・C# では下に相当します
using System;
using System.Collections.Generic;
public interface INode<T> {
	IDictionary<string, T> properties { set; get; }
	IList<INode> nodelist { set; get; }
}

・Java では下に相当します (大雑把)
public abstract class Node<T> implements java.io.Serializable {
	Map<string, T> properties;
	List<Node> nodelist;

	//メソッド省略
}

・properties の値 <T> は
  1) string
  2) シリアライズ可能な配列、連想配列

  (補足) JavaScript は int や bool などの原始型もセットできます。
  シリアライズには JSON を使います。
  JavaScript: JSON シリアライズ

サンプルのツリーデータを作る

Node のオブジェクトは new Node() で作ります。

例: let node = new Node();

node.propperties にノードに関するさまざまなデータを格納します。

例:
const p = node.propperties;
p.name = "ノードの名前";
p.text = "このノードに関するテキスト";
p.attribute1 = "ユーザー定義の属性など";
p.array1 = [ "配列の要素", "abc", "123" ];
p.map1 = { "キー":"値", "key1":"value1", "key2":"value2" };
...

キー名 (name, text, attribute1, array1, map1 など) はユーザーが
定義して適当な名前を付けます。

いろいろ

関連

inserted by FC2 system