3

「step」キーの値でネストされた JavaScript オブジェクトをフィルタリングしたい:

var data = {
"name": "Root",
"step": 1,
"id": "0.0",   
"children": [
    {
    "name": "first level child 1",
    "id": "0.1",
    "step":2,
    "children": [
        {
        "name": "second level child 1",
        "id": "0.1.1",
        "step": 3,
        "children": [
            {
            "name": "third level child 1",
            "id": "0.1.1.1",
            "step": 4,
            "children": []},
        {
            "name": "third level child 2",
            "id": "0.1.1.2",
            "step": 5,
            "children": []}

        ]},
                ]}
]

};

var subdata = data.children.filter(function (d) {
        return (d.step <= 2)});

これは、フィルターの値を 1 に設定した場合でも、変更されていないネストされたオブジェクトを返すだけです。cjm

4

3 に答える 3

2

再帰フィルター関数は、かなり簡単に作成できます。これは、定義されたすべての項目の JS オブジェクトを削除する例です["depth","x","x0","y","y0","parent","size"]

function filter(data) {
  for(var i in data){
    if(["depth","x","x0","y","y0","parent","size"].indexOf(i) != -1){
       delete data[i]; 
    } else if (i === "children") {
      for (var j in data.children) {
        data.children[j] = filter(data.children[j])
      }
    }  
  }
  return data;
}

他の何かでフィルタリングしたい場合は、選択したフィルター関数で 2 行目を更新してください。

于 2014-03-13T04:51:05.600 に答える
-2

はい、 1 つのノードの子のように、 1 つの配列 (リスト) でfilter動作します。ツリーを取得しました。ツリー全体を検索する場合は、ツリー トラバーサル アルゴリズムを使用するか、最初にすべてのノードをフィルター可能な配列に入れます。自分でコードを書くことができると確信しています。

于 2012-11-15T23:15:31.180 に答える