我正在尝试检查容器'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);
答案 0 :(得分:3)
for (x in y)
不是迭代数组中对象的正确构造。它仅用于迭代对象的键。
所以发生的事情是,Entity
变量不是获取两个member
对象,而是指那些分别为1
和2
的对象的索引。 。迭代这些对象的正确方法是:
for(var i = 0; i < members.length; i++) {
EntityID == members[i].EntityID;
}
答案 1 :(得分:3)
问题是你的for...in
循环。在迭代对象中的属性时,应该只使用for...in
,而不是通过数组中的项。
如果用以下内容替换此循环,则应该没问题:
for(var i=0,len=members.length; i<len; ++i){
var member = members[i];
//the rest