2012-07-30 78 views
1

我正試圖檢查容器'EntityGroup'對象的'members'數組中是否存在具有特定「ID」的'member'對象。爲什麼不以下EntityGroup.idExists(ID)的工作:檢測屬性值是否存在於對象數組中

EntityGroup = function() { 
    this.members = []; // intention is for this to hold 'Entity' objects 
    this.classType = null; // what class of entities does it hold 
}; 
EntityGroup.prototype = { 
    addEntity: function(entityType, EntityID) { 

     // TODO implement .idExists() check here 
     // dont add new member if the id does exist 
     this.members.push(new Entity(entityType, EntityID)) 

    }, 

    idExists: function(EntityID) { 

     var idExists = false, 
      member, 
      members = this.members; 

     for (member in members) { 

      if (EntityID == member.EntityID) { 
       idExists = true; 
       break; 
      } else { 
       continue; 
      } 
     } 
     return idExists; 
    } 
}; 

Entity = function(entityType, EntityID) { 
    this.EntityID = EntityID; 
    this.entityType = entityType; 
}; 

g = new EntityGroup(); 
g.addEntity("Person", 1); 
g.addEntity("Person", 2); 

console.log(g.idExists(1)); // returns false which is not expected 
console.log(g.members); 

回答

3

for (x in y)不是通過一個數組對象進行迭代的權利結構。它僅用於迭代對象的鍵。

所以發生的是,而不是讓兩個Entity對象時,member變量指的是12分別爲這些對象的索引。迭代通過這些對象的正確方法是:

for(var i = 0; i < members.length; i++) { 
    EntityID == members[i].EntityID; 
} 
+0

三江源,是工作:-) – johowie 2012-07-30 00:44:33

3

問題是您的for...in循環。迭代對象中的屬性時,只應使用for...in,而不是通過數組的項。

如果更換此循環與以下,你應該罰款:

for(var i=0,len=members.length; i<len; ++i){ 
    var member = members[i]; 
    //the rest 
+0

三江源,是工作:-) – johowie 2012-07-30 00:44:45

相關問題