【问题标题】:i want to split a string to get values in loop我想拆分一个字符串以获取循环中的值
【发布时间】:2013-03-14 22:10:59
【问题描述】:

我想拆分下面的字符串:

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

我想拆分这个字符串来获取值:

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

现在我该如何拆分它以获取值。

【问题讨论】:

  • 那不是字符串。
  • 你真的有那个代码作为字符串吗???
  • 试试myString.match(/\d+/g)myString.split(/\D+/)
  • 你自己尝试过吗?您刚刚发布了 here 以将您的 tree 放在一个阵列上,甚至在询问之前都没有尝试。

标签: javascript


【解决方案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;
}

【讨论】:

    【解决方案2】:

    如果这是一个 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
    

    【讨论】:

      【解决方案3】:

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

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

      会返回:

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

      (假设整个字符串都在一个名为 'str' 的 var 中)。

      【讨论】:

        【解决方案4】:

        我总是因为没有提供“vanilla javascript”答案而被骂,但就这样吧。看来你想要的是JSONSelect:

        var tree = [{   "id" : 1 }, {   "id" : 2,   "children" : [{
              "id" : 3
            }, {
              "id" : 4
            }, {
              "id" : 5,
              "children" : [{ 
                  "id" : 6
                }
              ] 
            }   ] }];
        
        jsel.match(tree, '.id');
        

        您也可以使用 underscore 执行此操作,但您需要将其展平,这样会更不优雅。

        【讨论】:

          猜你喜欢
          • 2014-09-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-09-19
          • 1970-01-01
          • 1970-01-01
          • 2020-07-06
          • 2019-03-19
          相关资源
          最近更新 更多