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。如果这是一个字符串,您可以 eval 来获取一个树对象。

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

我总是因为没有提供“vanilla 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 回答