循环访问链接对象,如何避免重复

Iterating through linked objects, how to avoid duplicates

本文关键字:何避免 访问 链接 对象 循环      更新时间:2023-09-26

我有一个对象数组,这些对象通过唯一 id 链接在一起。

像这样:

var nodes    = [];
    nodes[0] = {'id':1,'linksTo':[2,3],'x':1,'y':1};
    nodes[1] = {'id':2,'linksTo':[1],'x':2,'y':1};
    nodes[2] = {'id':3,'linksTo':[1],'x':2,'y':1};

因此,假设我要在它们链接到的画布元素中的每个点之间绘制线条。在上述情况下,我会画两条相同的线,一次从 id 1 到 id 2,然后再次从 id 2 到 id 1。这是没有效率的,在游戏循环中,随着时间的推移,这会损害帧速率。

我目前的方法类似于这个逻辑:

 Object.keys(nodes).forEach(function(nodeIndex) {
 nodes[nodeIndex].linksTo.forEach(function(connectedNode) {
    //line move to x,y 
    //line to x2, y2
  });
});
为了

不损害帧速率并避免以相同的方式绘制两次,最有效的方法是什么?请记住,它需要高效才能继续保持更高的帧速率。

仅当第一个节点的 id 小于第二个节点的 id 时,才能绘制该线。