【问题标题】:Can I use an Array Iterator to do the same function as a for loop?我可以使用数组迭代器来执行与 for 循环相同的功能吗?
【发布时间】:2019-08-20 23:51:57
【问题描述】:

我试图了解是否可以使用数组迭代器(如 .forEach())来完成与 for 循环相同的功能。

我正在尝试了解 javascript 事件侦听器并编写了一些基本代码来帮助我学习

我有多个类名为“按钮”的 div。

我拥有想要使用 for 循环实现的功能,但无法弄清楚如何使用迭代器来实现相同的功能。有可能吗??

// Can I use an Array Iterator to do the same operation here
for (var i = 0; i < button.length; i++) {
  addEvent(button[i]);
}

查看JSFiddle of all my code here

我尝试过使用 .forEach() 迭代器,但不知道如何在 forEach() 迭代器中获取数组索引,因为我需要定义在哪个按钮上运行 addEvent 函数。

【问题讨论】:

    标签: javascript loops addeventlistener arrayiterator


    【解决方案1】:

    button在您只发布了链接的代码中,是一个 HTMLCollection,因此您无法“原生地”使用它

    但是,使用 Array.from 您可以将其“转换”为数组,然后使用 Array#forEach 方法 - 因此,您的代码将是

    Array.from(button).forEach(function(btn) {
        addEvent(btn);
    });
    

    或者,甚至更好

    Array.from(button).forEach(addEvent);
    

    如果您正在处理 Internet Exploder,则需要 Array.from 的 Polyfill

    如果您需要处理版本 9 之前的 Internet Exploder,则需要 Array.prototype.forEach 的 Polyfill

    我链接到的 MDN 文档对两者都有 Polyfills

    【讨论】:

    • 感谢 Jaromanda X 的帮助。糟糕,当 doco 说 Array-like 时,我读了 Array。我没有意识到这是一个 HTML 集合。 > Document 接口的 getElementsByClassName 方法返回一个 >**array-like** 对象,其中包含所有具有给定类名的所有子元素。
    • 是的,这是一个陷阱:p
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-13
    • 2014-04-27
    • 1970-01-01
    • 2021-11-19
    • 1970-01-01
    相关资源
    最近更新 更多