我们说我有一个Person类,我每5秒收到一次关于所有人的传入数据。我想要创建一个新的Person()或更新现有的人。我在弄清楚那个人是否已经存在时遇到了很多麻烦。
我正在使用全局数组来存储所有人物对象
var people = [];
我有假数据
var data = {
id0 : { name : "Billy" },
id1 : { name : "Joe" }
}
如果是新人,则应将其添加到人员阵列
people[i] = new Person(i);
如果它是一个老人,它应该只运行更新方法
people[i].update();
这是我确定此人是否是新人的循环,但它不起作用。我知道我有点比较苹果和橘子。如果我能找到一些方法来比较people数组的索引名称(键)和数据对象的键名称,如
if(people[i] === data[i]) // update
else // new
我当前的循环
$.each(data, function(i,e){
console.log(people);
console.log(i);
if (people[i] === i)
people[i].update(e);
else
people[i] = new Person(e);
});
答案 0 :(得分:3)
您正在比较对象,这些对象根据参考进行内部比较。因此,即使值相同,如果它们不在内存中引用相同的位置,它们也不会等同。
如果您要根据属性进行比较,那么应该有一些独特的方法来识别一个人。是名字吗?您可以比较唯一标识人的属性或属性系列:
if (person[i].name === i.name)
//Do something
答案 1 :(得分:1)
if分支总是假的。人们[i]永远不会评估与我相同的价值。您需要找到另一种方法来比较新数据和数组中已有的数据。也许是一个带有对象的索引字段。