2012-07-30 121 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

相关问题