0

文字列の下に分割したい:

var tree = [{
  "id" : 1
}, {
  "id" : 2,
  "children" : [{
      "id" : 3
    }, {
      "id" : 4
    }, {
      "id" : 5,
      "children" : [{ 
          "id" : 6
        }
      ] 
    }
  ]
}];

この文字列を分割して値を取得したい:

1,2,3,4,5,6.

どうすればそれを分割して値を取得できますか。

4

4 に答える 4

1

あなたがそこに持っているものは次のように見えますJSON

これを試して:

var myObject = eval('(' + tree + ')');

var ids = findIds(myObject);

// this is untested, but the principle applies
function findIds(o) {

    var ids = new Array();

    for (var i = 0; i < o.length; i++) {

        ids.push(o[i].id);
        ids.push(findIds(o[i].children));
    }

    return ids;
}
于 2013-03-14T13:33:07.510 に答える
0

これが JavaScript オブジェクトの場合、ツリーを走査して ID を収集する方がおそらく高速です。これが文字列の場合は、評価してツリー オブジェクトを取得できます。

function collect(tree,arr){
  for(var i=0;i<tree.length;i++){
     arr.push(tree[i].id)
     for(var j=0;j<tree[i].children;j++){
        collect(tree[i].children[j],arr)
    }
 }
}

関数を呼び出すには

var arr=[];
collect(tree,arr);//arr will have results
于 2013-03-14T13:19:50.297 に答える
0

これが実際に文字列である場合の別のアプローチは、正規表現を使用することです (文字列が評価可能なコードでない場合は、将来このアプローチを使用できます)。

var ids = str.match(/\d+/g);

戻ります:

[1, 2, 3, 4, 5, 6]

(文字列全体が「str」という var にあると仮定します)。

于 2013-03-14T13:27:26.093 に答える
0

私はいつも「普通の JavaScript」の回答を提供しないと怒られますが、それはそれで構いません。あなたが望むのはJSONSelectのようです:

var tree = [{   "id" : 1 }, {   "id" : 2,   "children" : [{
      "id" : 3
    }, {
      "id" : 4
    }, {
      "id" : 5,
      "children" : [{ 
          "id" : 6
        }
      ] 
    }   ] }];

jsel.match(tree, '.id');

アンダースコアを使用してこれを行うこともできますが、フラット化する必要があり、エレガントさが大幅に低下します。

于 2013-03-14T14:10:59.843 に答える