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

Determining whether to create new Objects or update existing ones

本文关键字:对象 更新 创建 新对象      更新时间:2023-09-26

假设我有一个Person类,我每5秒钟接收一次关于所有人的传入数据。我要么想创建一个新的Person(),要么更新一个现有的Person。我很难弄清楚那个人是否已经存在。

我正在使用一个全局数组来存储所有的人对象

var people = [];

里有伪造的数据

var data = {
  id0 : { name : "Billy" },
  id1 : { name : "Joe" }
}

如果是新人,应该将其添加到人员数组中

people[i] = new Person(i);

如果是老人,它应该只运行更新方法

people[i].update();

这是我的循环,用来确定这个人是不是新人,但它不起作用。我知道我有点把苹果比作桔子。如果我能找到一些方法将人员数组的索引名称(键)与数据对象(如)的键名称进行比较

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/

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

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

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

if分支将始终是falsy。people[i]的计算值永远不会与i相同。您需要找到另一种方法来比较新数据和数组中已经存在的数据。也许是对象中的索引字段。