Javascript 数组的嵌套类,要获取外部数组的索引

Javascript 数组的嵌套类,要获取外部数组的索引,javascript,arrays,class,Javascript,Arrays,Class,我有2个类,生物类将节点数组作为属性。但是这些生物也将被放置在一个阵列中。我希望能够从任何节点获取生物索引。目前我所能做的就是从生物本身抓取生物索引。我一直在尝试在生物类中使用set函数,设置生物的生物索引编号,以及将所有节点的生物索引编号设置为相同的编号 //节点类 类节点{ 构造器X、y、r、颜色、高光、高光颜色{ 这个.x=x; 这个。y=y; 这个.r=r | | 20; this.color=color | | ff0; this.highlight=highlight | | fa

我有2个类,生物类将节点数组作为属性。但是这些生物也将被放置在一个阵列中。我希望能够从任何节点获取生物索引。目前我所能做的就是从生物本身抓取生物索引。我一直在尝试在生物类中使用set函数,设置生物的生物索引编号,以及将所有节点的生物索引编号设置为相同的编号

//节点类 类节点{ 构造器X、y、r、颜色、高光、高光颜色{ 这个.x=x; 这个。y=y; 这个.r=r | | 20; this.color=color | | ff0; this.highlight=highlight | | false; this.highlightColor=highlightColor | | 0000FF; } } //生物类 阶级生物{ 构造节点、肌肉、节点颜色{ this.nodes=节点; 这个。肌肉=肌肉; this.nodeColors=nodeColors | | ff0; Object.defineProperties此{ 节点阵列:{ get:i=>this.nodes[i], 集合:节点=>{ this.nodes[i]=newNode; } }, 肌肉阵列:{ get:i=>this.nodes[i], 设置:肌肉=>{ 这个.muscles[i]=newMuscle; } }, 创建者编号:{ 获取:=>生物。索引此, } }; } } 变量节点=[ 新节点100100, 新节点200200 ]; 变量=[ 新的创造者节点、肌肉
]; 我已经改变了你的职业,甚至不确定你的职业是否和你想象的一样,我还额外增加了一个职业来管理这些生物。我认为你的阵列设置不起作用

//节点类 类节点{ 构造器X、y、r、颜色、高光、高光颜色{ 这个.x=x; 这个。y=y; 这个.r=r | | 20; this.color=color | | ff0; this.highlight=highlight | | false; this.highlightColor=highlightColor | | 0000FF; } /*==属性:父生物===*/ 得到亲生动物{ 把这个还给我; } 集合父母创造生物{ 这个。_parentcreate=生物; } /*==方法:从生物移除===*/ 从动物身上移除{ 此参数为.\u parentbiote=null; } } 函数setParentForNodes{ this.nodesArray.forEachnode=>{ node.parentbiote=这个; }; } //生物类 阶级生物{ /*==构造函数===*/ 构造节点、肌肉、节点颜色{ this.nodes=节点; 这个。肌肉=肌肉; this.nodeColors=nodeColors | | ff0; setParentForNodes.callthis; } /*==属性:节点阵列===*/ 弄糟{ 返回这个.nodes; } 设置节点ArrayValue{ 这个节点=值; setParentForNodes.callthis; } /*==属性:musclesArray==*/ 肌肉发达{ 返回此.musclesArray; } 设置musclesArrayvalue{ this.musclesArray=值; } /*==方法:移除节点===*/ 移除节点{ this.nodes.forEachnode=>{ node.parentbiote=null; }; this.nodes=null; } } 类生物{ /*==构造函数===*/ constructorcreaturesArray=[]{ 这个。生物=新地图; creaturesArray.foreachCreative=>{ this.biotes.setbioter.id,bioter.model; }; } /*==方法:添加生物===*/ addCreatureid,模型{ 如果这个是hasid{ 控制台。日志“生物ID已存在”; 回来 } this.biods.setid,model; } /*==方法:getCreatureById==*/ GetCreatureById{ 如果这个是hasid{ 返回this.biods.getid; } 返回null; } } //创建节点 变量节点=[ 新节点100100, 新节点200200 ]; //使用节点创建地精。 var生物=新生物[ { id:'地精', 模型:新的Creaturenodes“肌肉” } ]; //创建侏儒,它没有节点 添加生物“矮人”,新生物[],“肌肉”; 常数 //获取第一个节点的父生物。 parentCreatureForNode=节点[0]。parentCreature, //获取矮人的生物实例。 侏儒=生物。getCreatureById为“侏儒”; //从第一个节点的父节点中删除节点。 parentCreatureForNode.removeNodes; //将节点指定给矮节点。 dwarf.nodesArray=节点; //地精应该报告它没有节点。 控制台.logbiates.getCreatureById'goblin'; //侏儒应该记录它有2个节点。 控制台.logbiates.getCreatureById'dwarf'; //确保节点报告其父节点是侏儒。
console.lognodes[0]。ParentBioter===矮人;我已经读了你的问题好几次了,我不确定你想要实现什么。您是否可以添加一个小示例arr
AY并基于这个解释你需要得到什么?为了同时解决你的问题和更好的性能,也许你应该考虑在生物对象中显式存储ID,因为Aray.ReXOXOF不是非常有效,on。@ Tijs数组在片段中。基本上我会有这两个数组。每个人都将扩展各自的课程。每个生物将拥有一系列节点。我想做的是能够只获取其中一个节点,并且能够获取其他生物数组中该生物的索引。希望这是有意义的。@Joel但即使我有了它,我怎么能从一个节点上获取该id呢?我正在使用array.indexOf,因为生物数组将不断变化。你有其他方法在索引更新时抓取索引吗?如果你的id不是作为数组索引,而是一个增量数字,对于给定的生物来说永远不会改变。。。并使用对象/贴图[number=>生物]而不是数组。但是我忽略了关于节点嵌套对象的要点,那么直接在节点中存储其父生物引用呢?非常感谢您的帮助,我想稍后我将使用其中的一些代码。但是仔细看,我仍然认为如果我用这个,我会遇到同样的问题。因为我试图将两个节点连接在一起,但一旦它们连接,它们都将处于相同的生物ID下。所以我认为每个节点都必须能够保留它们所属生物的属性。因此,当我调用它时,我可以删除一个生物,并将该生物的所有节点和肌肉添加到另一个生物中。我已经更改了答案。。。我想它现在可以做你想要的了。工作得很好,我实际上只需要使用setParentForNodes函数,但我仍然会接受你的一些其他建议来清理我的代码,非常感谢!