如何在javascript中最好地搜索和更新两个对象数组?

如何在javascript中最好地搜索和更新两个对象数组?,javascript,Javascript,这里有一个Person对象,它有以下两个属性:firstname和mood。假设firstname属性是唯一的 如果我有一个由3个人对象组成的数组,则假设每条线都是一个人对象: Alison, Happy Bob, Sad Charles, Happy 如果有第二个数组,例如JSON数组中的3个人: Alison, Sad Bob, Happy Jordan, Sad 我希望最有效的方法是能够遍历第二个数组来更新第一个数组中的项。我的想法是2个for循环。例如: 第一次迭代,查看Alison

这里有一个Person对象,它有以下两个属性:firstname和mood。假设firstname属性是唯一的

如果我有一个由3个人对象组成的数组,则假设每条线都是一个人对象:

Alison, Happy
Bob, Sad
Charles, Happy
如果有第二个数组,例如JSON数组中的3个人:

Alison, Sad
Bob, Happy
Jordan, Sad
我希望最有效的方法是能够遍历第二个数组来更新第一个数组中的项。我的想法是2个for循环。例如:

第一次迭代,查看Alison,在第一个数组中搜索Alison,将Alison更新为Sad。第二次迭代,查看Bob,搜索…等 第三次迭代,看到Jordan,在第一个数组中搜索Jordon,没有找到。。。与Jordan、Sad一起将新对象推到阵列上

现在我知道数组可能不是最好的方法,如果有更好的方法在第一个数组不是数组的情况下实现这一点。。可能是地图等。我关心的是性能,因为我描述的方法对许多人来说效率极低,例如,如果阵列大小为100


请提供帮助,我们将不胜感激。

这在一定程度上取决于您的浏览器和库环境。有Array.indexOf'value',但这在IE中不起作用,而且它可能只是在幕后进行优化循环

如果你有很多数据,而且很可能会被排序,这对你来说似乎不是这样,那么最好进行二进制搜索。换句话说,从数据集的中间取值,并将其与查询进行比较。如果值更大,则下一个查询是前一半值的中间值,依此类推,直到得到它为止


这不一定是性能问题的解决方案,尽管它比某些解决方案要好,但在减少编码开销方面,这类工作的一个很好的替代方案是库。使用下划线,您可以使用_detect获取值,如果找不到,则只使用Array.push。

如果每个人都有唯一的id或引用,您可以将其放入对象中,并将id用作键,然后执行以下操作:

if (sadBob.id in personCollection) {
    // sadBob is already there
    personCollection.update(sadBob);

} else {
    // add sadBob
    personCollection.addPerson(sadBob);
}

或者,您也可以向array2中的person对象添加一个属性,该属性是创建它们时在array1中的索引。因此,如果它们没有索引,它们就不在数组1中。如果他们有一个索引,你可以直接使用一个与上面相同的对象,并使用数组索引作为引用或id。

person collection是什么类型?@Utiveras-一个对象。了解更多关于如何创建person对象以及它们如何在person数组中结束的信息可能会有所帮助。function Personname,mood{this.name=name,this.mood=mood}