利用 ES6 的 for...of 遍历算法,减少内存开销及降低系统复杂度

阅读时长 5 分钟读完

在前端开发中,遍历算法是非常常见的技术之一,而在 ES6 中,我们可以使用 for...of 循环来遍历数组、字符串、Map、Set 等可迭代对象,相较于传统的 for 循环,for...of 有助于减少内存开销,并简化编写过程,同时可以提高代码可读性,降低系统复杂度。

ES6 for...of 的基本语法

for...of 对于数组、可迭代对象进行迭代遍历,其基本语法如下:

iterable 可为数组、Set、Map、Arguments 对象等可迭代对象,而其中的 for...of 循环语句会在每个迭代中按顺序提取 iterable 内的元素,并将其赋值给变量 iterable,使代码执行更加简洁和易读。

与传统的 for 循环不同,for...of 不需声明索引或属性名,以及不需要通过索引或属性名访问元素,直接迭代值即可。

for...of 与 for 循环的比较

为了更好地理解“for...of 较传统 for 循环的优势”,我们可以通过比较两种遍历方法,如下所示:

-- -------------------- ---- -------
--- --- - --- -- -- -- ---

-- --- --
--- ---- - - -- - - ----------- ---- -
  --------------------
-

-- -------- --
--- ---- ------- -- ---- -
  ---------------------
-

相较于传统的 for 循环,for...of 循环不需要声明索引,也无需用索引来访问元素,只需直接遍历元素本身即可,在循环中的内存开销更少,系统复杂度更低。

此外,for...of 常用于对 Set、Map 的遍历,而 for 循环需要使用迭代器 iterator 实现,较为繁琐。

for...of 与 forEach() 方法的比较

for...of 循环与 forEach() 方法是两种遍历数组的方式,而它们之间存在一些差异。

forEach() 方法是 ES5 中添加的迭代器方法,意为“对数组的每个元素运行提供的函数”,从语法上看,forEach() 方法是注重方法调用,而 for...of 是注重迭代过程的。

此外,传统的 for 写法以及 forEach() 方法只能中断循环,而 for...of 可以使用 break 和 continue 语句中断或跳过循环,更加灵活。

遍历 Set 与 Map

Set 和 Map 是常见的可迭代对象,利用 for...of 循环遍历 Set 和 Map 也是非常方便的。

对于 Set,其元素是唯一的,而且可以添加、删除和遍历,使用 for...of 循环可以轻松遍历每个元素:

对于 Map,其元素由键值对组成,使用 for...of 循环需要结合 Map 的 entries() 方法来遍历。 entries() 方法将 Map 对象转化为由键值对组成的数组,其中键值对表示为 [key, value],如下所示:

利用 for...of 提高代码可读性和可维护性

在实际开发中,使用 for 循环遍历数组通常代码量较大,难以维护,而由于 for...of 循环简洁易读,可读性更强,也更容易维护。

比如,我们可以用 for 循环和 for...of 循环分别实现数组求和,两者差异如下:

-- -------------------- ---- -------
--- --- - --- -- -- -- ---
--- --- - --

-- --- ----
--- ---- - - -- - - ----------- ---- -
  --- -- -------
-
----------------- -- -- --

-- -------- ----
--- ---- ------- -- ---- -
  --- -- --------
-
----------------- -- -- --

可以看到,由于 for...of 循环更加灵活,代码也更清晰,能够优化代码和提升开发效率。

实战应用:遍历 DOM 节点

除了遍历数组、Set、Map 等可迭代对象,for...of 循环也可以用来遍历 DOM 节点。

比如,我们可以遍历一个 div 元素下的所有 p 标签元素并进行样式设置,如下所示:

可以看到,利用 for...of 循环遍历 DOM 节点很容易实现,并能够简化代码的复杂度。

总结

通过本文的讲解,相信您对于 for...of 循环的语法、优势、应用以及实战方法都有了更加深入的了解。

总的来说,相较于传统的 for 循环和 forEach() 方法,for...of 循环在内存开销和系统复杂度方面都有了很大的提升,可读性和可维护性也更好,因此在实际开发中,使用 for...of 循环进行迭代遍历也是非常值得尝试的。

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/64e5a3ebf6b2d6eab3114226

纠错
反馈