我想拆分一个字符串来获取循环中的值

时间:2013-03-14 13:13:05

标签: javascript

我想分成以下字符串:

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

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

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

现在我如何拆分它以获得价值。

4 个答案:

答案 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执行此操作,但是您需要将其展平并且不那么优雅。