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()
然后删除子项
在Idispose()
之前,现在我想检查该子级的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@sarahsoId
在页面中必须是唯一的。能否提供dom的结构和所需的项?您的代码没有提供任何见解