2013-04-20 3 views
0

Привет У меня есть массив, который содержит следующие числа, однако, когда я выполняю цикл через функцию everyNode (которая итерации 13 раз), он повторяет все элементы списка 13 раз. Я тестировал все, но он все еще производит ошибку, я выполняю цикл for правильно?Ошибка в индексировании массива Javascript

list[61,67,78] 
var len = list.length; 

fd.graph.eachNode(function (node) { // loops thru all node id's in graph (13) 
    for (var i = 0; i < len; ++i) { 
     if (i in list) { 
      var nody = list[i]; // I put the number in a variable 
      var nodess = fd.graph.getNode(nody); //this takes the number and matches it with a node id, it "odjectify" it 
      if (node.id != nodess.id) { // if the list nodes are not the same 
       node.setData('alpha', 0); // 
       node.eachAdjacency(function (adj) { // this make the unmatched nodes disappear 
        adj.setData('alpha', 0, 'end'); 
       }); 
      } 
     } 
    } 
}); 
+1

Что вы пытаетесь сделать с 'if (i in list)'? – 0x499602D2

+0

Это незначительное значение I, используемое для индексации – Squirtle

ответ

0

Это поведение конструкции:

Вы цикл по графику (в 13 раз, как вы говорите), то внутри каждой итерации вас огибать массиве (3 шт).

Если вы хотите только в циклю один раз над массивом, просто переместить его из внешнего контура

+0

Причина, по которой я должен зацикливаться, состоит в том, что я хочу, чтобы элементы списка были объектами, а затем проверены на другие, если я зацикливаюсь на улице, то я бы не смог проверить каждый list.node объект к другому – Squirtle

1

Этой линия ненужная:

if (i in list) 

in ключевого слово возвращает истину, если его правый операнд содержит свойство, указанное его левым операндом. При использовании этого с массивами он возвращает неожиданные результаты. Поведение этого ключевого слова в этом контексте ничтожно, поэтому вы должны просто его вынуть.

Кроме того, необходимо создать list массив так:

var list = [61, 67, 78]; 

... Однако, когда я петля хотя eachNode (который перебирает в 13 раз) он повторяет все элементы списка 13 раз

Это не так, оно фактически итерации свыше eachNode 13 раз. Вы также сделали цикл for, который будет пересекать массив list по его длине.


Теперь, когда вы дали мне более подробную информацию о том, что вы хотите, вот обновленный код. Я надеюсь, что это сработает для вас:

fd.graph.eachNode(function (node) { 
    var flag = false; 

    for (var i = 0; i < len; ++i) 
    { 
     var nody = list[i]; 
     var nodess = fd.graph.getNode(nody); 

     if (node.id == nodess.id) { 
      flag = true; break; 
     } 
    } 

    if (flag) 
    { 
     node.setData('alpha', 0); 
     node.eachAdjacency(function (adj) { 
      adj.setData('alpha', 0, 'end'); 
     }); 
    } 
}); 
+0

Мне нужно «объективировать» элементы в массиве списка с помощью метода - fd.graph.getNode(), тогда мне нужно сравнить их с каждым узлом на графике, однако я не могу понять, как для гнезда цикла в массиве eachnode, чтобы протестировать каждый узел элемента для каждого узла. – Squirtle

+0

Если я зацикливаюсь, переменная, индексирующая элементы, просто даст мне последний в массиве – Squirtle

+0

@Squirtle Задайте логическое значение вне цикла for. Затем внутри блока if 'if (node.id! = Nodess.id)' установите переменную в 'true', затем' break'. Затем вне цикла for проверьте, истинно ли это логическое значение. Если это так, тогда запустите исходный код, который был внутри этого блока if. – 0x499602D2

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