优化循环以比较两个阵列

这篇小文章将向您展示当您需要比较两个数组时如何优化运行时性能(一个相当常见的任务)。 仔细阅读整篇文章,您将看到最终代码段的优势:)

假设我们想找出两个列表中包含的元素。


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

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值