确定是创建新对象还是更新现有对象
Determining whether to create new Objects or update existing ones
假设我有一个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相同。您需要找到另一种方法来比较新数据和数组中已经存在的数据。也许是对象中的索引字段。
相关文章:
- 从knockout.js中的另一个对象更新一个深度结构化的javascript对象
- Meteor使用对象更新集合
- 如何使用不同视图的JSON对象更新angular js中的全局JSON字段
- 流星反应式嵌套对象更新父对象
- 从返回的 MongoDB 对象更新 Angular.js $scoped
- 在节点 JS 中将值从一个对象更新到另一个对象
- 使用循环从另一个对象更新对象
- React未从数组内的对象更新属性
- 可以't使用新对象更新localStorage
- 使用MongoDB,如何使用变量中的对象更新数组中的对象
- 从用PHP脚本创建的json对象更新速度表数据
- mongoDB-使用$set和一个对象更新文档
- 无法使用新数据对象更新Knockout UI
- 通过REST端点用JSON对象更新Mongoose架构
- 变量引用对象的值,但在对象更新时不更新
- 如何使用jq命令行实用程序执行JSON对象更新
- ReactJS皮质对象更新渲染未调用
- 如何使用json对象更新dojo网格
- 使用接收到的对象更新css设置
- 只有一些我的解析对象更新(总是9,但没有更多),当我运行这个javascript解析云代码