Javascript 如何循环节点的所有子节点并检查任何id是否被多次使用?

Javascript 如何循环节点的所有子节点并检查任何id是否被多次使用?,javascript,function,loops,match,Javascript,Function,Loops,Match,我有一个函数,可以循环我的场景以获得特定的节点。一旦获得该节点,它将遍历其子节点并检查是否有任何子节点具有几何体或材质属性。如果他们这样做,那么我将dispose()然后删除子项 在Idispose()之前,现在我想检查该子级的geometry.id是否与场景中的任何其他子级几何体id匹配。如果它匹配,那么我不disposeI只是removeit。如果它没有任何匹配的几何体id,那么我可以dispose然后删除它 scene.traverse(function(node) { if (nod

我有一个函数,可以循环我的场景以获得特定的节点。一旦获得该节点,它将遍历其子节点并检查是否有任何子节点具有几何体或材质属性。如果他们这样做,那么我将
dispose()
然后
删除子项

在I
dispose()
之前,现在我想检查该子级的geometry.id是否与场景中的任何其他子级几何体id匹配。如果它匹配,那么我不
dispose
I只是
remove
it。如果它没有任何匹配的几何体id,那么我可以
dispose
然后
删除它

scene.traverse(function(node) {
  if (node.treeNode) { //node has treeNode
    sid.forEach(function(id) {
     if (node.treeNode.sid === id) { 
       if (node.children) {
         node.traverse (function (child) {
          if (child instanceof THREE.Mesh) {
           if (child.geometry) {
           // here check if scene has children of type mesh and any of its
           // children has the same geometryid of this child before disposing it.
            child.geometry.dispose();
           }
           if (child.material) {
             child.material.dispose();
           }
         }
         node.remove(child);
        });
      }
    }
   });
 }
});
我猜它看起来像:

  if (node.children) {
        node.traverse (function (child) {
          if (child instanceof THREE.Mesh) {
            if (child.geometry) {
               scene.traverse (function(allChildren) {
                  if(allchildren.geometry) { //check if child has geometry first
                     if(allchildren.geometry !== child.geometry.id) {
                        child.geometry.dispose();
                     }
                  }
            }
            if (child.material) {
                child.material.dispose();
            }
          }
          node.remove(child);
         });
    }
但我不确定我是否遍历了场景,如果场景中找到了我试图比较的同一个孩子,会发生什么

例如,
all children
children
都是场景的一部分。如果我比较它们:

if (allchildren.geometry !== child.geometry.id)
当他们都在比较同一件事时会发生什么。这会发生吗?因为
node.geometry
在场景中,
allchildren.geometry
也在场景中

我希望它检查的是是否有任何其他
geometry.id
与我当前使用的几何体匹配


请注意,我的几何体ID对于每个网格都是唯一的。同一场景中的另一个网格可以包含相同的geometryId(在这个意义上不是唯一的)

对不起,我不明白你的意思?节点的遍历方法来自哪里?请参阅我编辑的code@sarahso
Id
在页面中必须是唯一的。能否提供dom的结构和所需的项?您的代码没有提供任何见解