我想分成以下字符串:
var tree = [{
"id" : 1
}, {
"id" : 2,
"children" : [{
"id" : 3
}, {
"id" : 4
}, {
"id" : 5,
"children" : [{
"id" : 6
}
]
}
]
}];
我想拆分此字符串以获取值:
1,2,3,4,5,6.
现在我如何拆分它以获得价值。
答案 0 :(得分: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;
}
答案 1 :(得分: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
答案 2 :(得分:0)
如果这真的是一个字符串,另一种方法是使用正则表达式(如果你的字符串不是可以被评估的代码,你将来可以使用这种方法。)
var ids = str.match(/\d+/g);
将返回:
[1, 2, 3, 4, 5, 6]
(假设整个字符串在一个名为'str'的var中)。
答案 3 :(得分:0)
我总是因为没有提供&#39; vanilla javascript而被大吼大叫。答案,但也是如此。看起来你想要的是JSONSelect:
var tree = [{ "id" : 1 }, { "id" : 2, "children" : [{
"id" : 3
}, {
"id" : 4
}, {
"id" : 5,
"children" : [{
"id" : 6
}
]
} ] }];
jsel.match(tree, '.id');
您也可以使用underscore执行此操作,但是您需要将其展平并且不那么优雅。