如何结合forEach循环与every方法提升代码效率与组织结构
代码优化说明
你提交的第二版优化代码存在明显性能缺陷:将价格列表的遍历嵌套进了标题列表的遍历逻辑中,会导致价格列表被重复遍历的次数等于标题元素的总数量,反而比最初版本的4次串行遍历性能更差,完全没有达到减少循环次数的目标。
正确的优化思路是把「收集符合条件的元素内容」和「校验内容」两个步骤合并到同一次遍历中执行,不需要额外定义数组暂存数据,也不需要嵌套遍历,只需要分别遍历标题、价格列表各1次即可,相比最初版本可以减少一半的遍历次数,优化后的代码如下:
it('校验ebay搜索rolex后所有价格都包含$符号', () => { browser.url('./') // 定位搜索框输入关键词并触发搜索 $('[class="gh-tb ui-autocomplete-input"]').click(); $('[class="gh-tb ui-autocomplete-input"]').setValue("rolex"); browser.keys("Enter"); // 单次遍历完成标题筛选+校验,无需额外数组暂存数据 $$('[class="s-item__title"]').forEach((element) => { const text = element.getText().toLowerCase(); if (text.length > 50) { expect(text).to.have.lengthOf.above(5); } }); // 单次遍历完成价格筛选+校验,无需额外数组暂存数据 $$('[class="s-item__price"]').forEach((element) => { const priceText = element.getText().toLowerCase(); if (priceText.length > 0) { expect(priceText).to.contain('$'); } }); })
优化点说明
- 移除了两个用来暂存数据的空数组,减少不必要的内存占用
- 把原来先遍历存数据、再遍历校验的两次循环合并为一次,总遍历次数从4次降低到2次
- 提前把元素的文本内容缓存到变量中,避免同一个元素重复调用
getText()方法获取内容,进一步提升执行效率 - 修复了原第二版代码中嵌套循环的性能缺陷
内容的提问来源于stack exchange,提问作者Sergei
相关产品推荐
相关产品推荐

