多数组迭代javascript
在迭代两个不同的数组时,我有一个严格基于性能的问题多数组迭代javascript,javascript,arrays,iteration,performance-testing,Javascript,Arrays,Iteration,Performance Testing,在迭代两个不同的数组时,我有一个严格基于性能的问题 我的第一个数组由以下方式组成,对象由{id,number}组成 var arr1 = [{id: 1, number: 7}, {id: 2, number: 5}]; 我的第二个数组由相同的id字段和一个字符串值组成 var arr2 = [{id: 2, string: 'foo'}, {id: 1, string: 'bar'}]; 我的问题是,我需要将第一个数组中的id与第二个数组中的id按照该顺序进行匹配。我用以下方式编写代码 a
我的第一个数组由以下方式组成,对象由{id,number}组成
var arr1 = [{id: 1, number: 7}, {id: 2, number: 5}];
我的第二个数组由相同的id字段和一个字符串值组成
var arr2 = [{id: 2, string: 'foo'}, {id: 1, string: 'bar'}];
我的问题是,我需要将第一个数组中的id与第二个数组中的id按照该顺序进行匹配。我用以下方式编写代码
arr1.forEach(function(x){
arr2.forEach(function(y){
if(condition){
Do something...
}
});
});
有没有一种更快/更有效的方法可以在没有两个forEach循环的情况下遍历数组?或者,该配置是比较所有值的最佳方法
我写的代码可以正常工作并且返回没有问题,但是我不禁想到这里有一种更快的(性能方面的)方法或方法来做同样的事情
感谢您对此的所有见解 很好地使用本机
for..loop
将更快地产生相同的结果,因为forEach
方法与数组的实现完全相同。如果你更喜欢速度而不是表现力,那么就选择for..loop
看看这个事实上,您的代码运行在
O(n^2)
复杂度中
您可以做的是:
mergesort对arr1
和arr2
进行排序
在这种方法中,您将得到
O(n*logn+n*logn+n)
,结果是O(n*logn)
既然id属性应该是唯一的,为什么不利用本机javascript对象呢
var objects1 = {
id_1: {number: 7},
id_2: {number: 5}
};
var objects2 = {
id_2: {string: 'foo'},
id_1: {string: 'bar'}
};
console.log(objects1.id_1.number + ' | ' + objects2.id_1.string);
我认为这是实现这一点的最快方法。我建议您在遇到性能问题之前不要在意这一点
如果性能问题与您的情况相同:
注释
- 未经编辑的测试套件使用10000个项目执行
- 有些方法可以分为准备和应用两部分,因此,如果您需要将“静态”数组多次合并到其他数组中,那么性能增益将非常大
- 开放式开发工具的性能通常较小(小得多)
==更新==
测试结果:
- Chrome在“将一个数组转换为对象”方法中提供了更好的性能
- Edge在“对两个数组进行排序”方法中提供了更好的性能
- mac上的Safari在“将一个数组转换为对象”和“对两个数组进行排序”两种方法中的性能几乎相同(chrome&edge中的赢家)
。forEach
是一个同步函数,是在数组中完全循环的最快方法。另外,.forEach
不能是break
d,因此如果需要,使用for…of
可以在某些条件成功后停止迭代
如果您试图从数组中查找一组特定的项,您可能需要使用
.filter
,.map
,.find
,。一些
或。每个的id
对于每个数组都是唯一的吗?id是否按升序排列?如果是,则获取arr1的id和访问arr2的准确位置,而不使用循环,这是id
排序在arr1
?可能重复-这是一个主要基于意见的问题,因为您将根据经验等获得许多意见。因此,这个问题应该结束。