2015-01-23 4 views
1

У меня есть массив объектов, которые связаны уникальным идентификатором.Итерация через связанные объекты, как избежать дубликатов

Что-то вроде этого:

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 
    }); 
}); 

Что бы наиболее эффективный способ сделать это, чтобы не повредить частоту кадров и не рисовать точно так же дважды? Помня, что он должен быть эффективен для обеспечения более высокой частоты кадров.

ответ

3

Вы можете нарисовать линию только в том случае, если идентификатор первого узла меньше, чем идентификатор второго узла.

+0

Не работает ли это только в том случае, если объекты находятся в порядке от наименьшего до наивысшего идентификатора? Это или мой мозг не работает должным образом. – Sir

+0

Предположим, что Node1 Node1, пропустите его и продолжайте движение, потому что позже вы найдете Node1 -> Node2. –

+0

Ой, хорошо, имеет смысл! Черт, я не знаю, почему я об этом не думал! Спасибо. – Sir

Смежные вопросы