如何在javascript中最好地搜索和更新两个对象数组
How to best search and update two arrays of objects in javascript?
所以我这里有一个Person对象,它具有以下两个属性:firstname和mood。假设firstname属性是唯一的。
如果我有一个由3个人对象组成的数组()(假设每一行都是一个人对象):
Alison, Happy
Bob, Sad
Charles, Happy
如果有第二个数组,例如3个人(来自JSON数组):
Alison, Sad
Bob, Happy
Jordan, Sad
我希望能够以最有效的方式迭代第二个数组以更新第一个数组中的项。我的想法是用2表示循环。例如:
第一次迭代,看到Alison,在第一个数组中搜索Alison,将Alison更新为Sad。第二次迭代,看到Bob,搜索。。。等第三次迭代,看到乔丹,在第一个数组中搜索乔丹,没有找到。。。和乔丹一起把新的物体推到阵列上,萨德。
现在我知道,如果有更好的方法在第一个数组不是数组的情况下实现这一点,那么数组可能不是最好的方法。。可能是一个映射等。我关心的是性能,因为我描述的方法对许多人来说效率非常低,例如,如果数组大小为100。
请帮忙,不胜感激。
这在一定程度上取决于您的浏览器和库环境。有Array.indexOf('value')
,但它在IE中不起作用,而且它可能只是在幕后做一个(优化的)循环。
如果你有很多数据,而且很可能会被排序,但事实并非如此,那么最好进行二进制搜索。换句话说,取数据集中间的值,并将其与查询进行比较。如果它更大,您的下一个查询是值集前半部分的中间值,依此类推,直到您得到它
不一定是性能问题的解决方案(尽管比某些更好),但在减少编码开销方面,这类工作的一个很好的替代方案是underscore.js库。使用下划线,可以使用_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)。
- JavaScript-保存、存储和更新数组
- 使用ajax(刚刚更改的值)更新数组表
- 如何使用ajax和jquery动态更新数组表
- 使用条件for循环更新数组-Javascript
- 正在RactiveJS上更新数组
- 更新数组中的嵌入文档 - Mongodb + Node Driver
- 余烬更新数组中的对象
- 通过代码+敲除更新数组中的值
- 正在尝试获取事件之外的更新数组的值
- 更新数组后,ng重复双重渲染
- 使用angularjs中复选框的值更新数组
- 将变量推送到数组中,并在每次单击时更新数组
- 如何在Mongoose中从多个数组更新数组内部的值
- 在 ReactJS 中更新数组中对象的最佳方法是什么
- 在 Rally SDK 2 中,如何更新数组字段,例如在变更集的工件上
- 更新数组对象值
- MongoDB 用变量更新数组
- AngularJS - 使用 $http 更新数组内的嵌套对象属性
- JavaScript 使用索引更新数组元素
- 如何更新数组中的所有值?-JS/Jquery.