确定是创建新对象还是更新现有对象

时间:2015-03-19 18:52:02

标签: javascript jquery

我们说我有一个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);     
});

http://jsfiddle.net/j6ma2tr2/15/

2 个答案:

答案 0 :(得分:3)

您正在比较对象,这些对象根据参考进行内部比较。因此,即使值相同,如果它们不在内存中引用相同的位置,它们也不会等同。

如果您要根据属性进行比较,那么应该有一些独特的方法来识别一个人。是名字吗?您可以比较唯一标识人的属性或属性系列:

if (person[i].name === i.name)
//Do something

答案 1 :(得分:1)

if分支总是假的。人们[i]永远不会评估与我相同的价值。您需要找到另一种方法来比较新数据和数组中已有的数据。也许是一个带有对象的索引字段。