Могу ли я использовать итератор массива для выполнения той же функции, что и для цикла for? - PullRequest
1 голос
/ 30 марта 2019

Я пытаюсь понять, возможно ли использовать итератор массива (например, .forEach ()) для выполнения тех же функций, что и для цикла.

Я пытаюсь понять слушателей событий javascript и написал некоторый базовый код, чтобы помочь мне выучить

У меня есть несколько div с именем класса 'button'.

У меня есть функциональность, которую я хочу добиться, используя цикл 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 всего моего кода здесь

Я пытался использовать итератор .forEach (), но не смог понять, как получить индекс массива в итераторе forEach (), так как мне нужно определить, на какой кнопке запустить функцию addEvent.

1 Ответ

2 голосов
/ 30 марта 2019

button, в коде, который вы только что разместили ссылку на , является HTMLCollection, поэтому вы не можете ничего с этим сделать "изначально"

Однако, используя Array.from вы можете «преобразовать» его в массив, а затем использовать метод Array # forEach - таким образом, ваш код будет

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

илиеще лучше

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

Если вы имеете дело с Internet Exploder, вам понадобится Polyfill для Array.from

Если вам нужно иметь дело с Internet Exploder до версии 9, вы 'Вам понадобится Polyfill для Array.prototype.forEach

В документации MDN, с которой я связан, есть Polyfills для обоих

...