这篇小文章将向您展示当您需要比较两个数组时如何优化运行时性能(一个相当常见的任务)。 仔细阅读整篇文章,您将看到最终代码段的优势:)
假设我们想找出两个列表中包含的元素。
var list1 = [1, 2, 3, 4, 5, 6];
var list2 = ['a', 'b', 'c', 3, 'd', 'e'];
for (var i in list1) {
for (var j in list2) {
if (list1[i] == list2[j]) {
alert('found ' + list1[i] + ' in both lists');
}
}
}
当内部条件返回true时,最好跳出整个循环,因此,如果执行以下操作,则可以更快地执行:
var list1 = [1, 2, 3, 4, 5, 6];
var list2 = ['a', 'b', 'c', 3, 'd', 'e'];
outerloop: for (var i in list1) {
for (var j in list2) {
if (list1[i] == list2[j]) {
alert('found ' + list1[i] + ' in both lists');
break outerloop;
}
}
}
但是请记住,这不是比较两个数组的最佳方法!
通过使用两个循环,您最多可以执行n * m个步骤。 但是我们可以做得更好! 那n呢
+ m,嗯? ;)看一下以下实现:
var list1 = [1, 2, 3, 4, 5, 6];
var list2 = ['a', 'b', 'c', 3, 'd', 'e'];
var lookup = {};
for (var j in list2) {
lookup[list2[j]] = list2[j];
}
for (var i in list1) {
if (typeof lookup[list1[i]] != 'undefined') {
alert('found ' + list1[i] + ' in both lists');
break;
}
}
由于通过键而不是值搜索数组中的元素要快得多,因此我们创建了索引数组“ lookup”,并将list2中的所有值复制为键中的键。
执行此代码后,查找如下所示:
var lookup = {
'a': 'a',
'b': 'b',
'c': 'c',
'3': '3',
'd': 'd',
'e': 'e'
};
现在,遍历list1并检查查找中是否存在匹配的索引变得很简单,这比遍历list2快得多!
祝你好运和亲切的问候。
From: https://bytes.com/topic/javascript/insights/699379-optimize-loops-compare-two-arrays
779

被折叠的 条评论
为什么被折叠?



