javascript - 以递归方式从多维数组中删除标记的元素

时间:2016-08-17 06:39:30

标签: javascript arrays multidimensional-array

我有一个对象数组,其中包含更多深度未知的对象(具有相同结构)。

sTree = [{
    Tree: [{
       Tree: [{
       }],
       Leafs:[{},{},{}]
    }],
    Leafs:[{},{},{}]
}

这是一棵经典(实际)的树 每个Object在DOM对象中都有一个引用(使用$(obj).data("ref",obj))。 |这部分已完成|

用户正在使用obj.deleted = true标记某些对象 |这部分已完成|

当用户完成后,我想返回sTree,而不会使用deleted=true标记的项目。

怎么做?

感谢

1 个答案:

答案 0 :(得分:1)

用递归来做。循环结构并检查每个项目:

function cleanTree(tree){
  for(var i in tree){
    if(tree[i].deleted){
      // debug output
      console.log('delete '+tree[i].toString());
      delete tree[i];
    }else{
      // debug output
      console.log('look at '+tree[i].toString());
      tree[i] = cleanTree(tree[i]);
    }
  }
  return tree;
}

你必须稍微改变for循环的内部才能使用你的结构。