2013-03-14 79 views
0

我想分割以下字符串值:我想将一个字符串分解得到的循环

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

我想要拆分此字符串来获取值:

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

现在,我怎么分割它以获取值。

+9

这不是字符串。 – 2013-03-14 13:13:53

+0

你真的有一个字符串的代码? – Bergi 2013-03-14 13:14:05

+1

试试'myString.match(/ \ d +/g)'或'myString.split(/ \ D + /)' – Bergi 2013-03-14 13:15:32

回答

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; 
} 
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 
0

另一种方法,如果这真的是一个字符串将使用正则表达式(你可以在未来使用这种方法,如果你的字符串不是代码,可以被评估)。

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

将返回:

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

(假设整个字符串是在一个名为 'STR' 变种)。

+0

啊,看起来像Bergi在评论中已经打败了我。 – 2013-03-14 13:28:35

0

我总是大声呵斥不提供“香草的javascript的答案,但就这样吧。这似乎是你想要的是JSONSelect

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

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

你也可以用underscore做到这一点,但你需要弄平,这将是优雅的要少得多。