Javascript foreach не работает

Почему for работает, а forEach не работает?

У меня есть функция, которая дезактивирует инпуты:

И есть функция, которая их активирует:

Но если я пытаюсь переписать функцию дезактивации на forEach, то она не работает:

3 ответа 3

Потому что атрибут не синхронизируется со свойством. Менять атрибут неправильно, надо менять свойство.

В таких случаях, первое место, куда надо смотреть, — консоль браузера и ошибки в ней.

Дело не в методе forEach.

Метод setAttribute() указывает атрибуты по правилам XHTML. Они предполагают формат атрибут=’значение’.

Поэтому вы можете использовать forEach, однако метод setAttribute должен иметь вид setAttribute(‘disabled’, ‘disabled’)

Всё ещё ищете ответ? Посмотрите другие вопросы с метками javascript foreach for или задайте свой вопрос.

Похожие

Подписаться на ленту

Для подписки на ленту скопируйте и вставьте эту ссылку в вашу программу для чтения RSS.

дизайн сайта / логотип © 2021 Stack Exchange Inc; материалы пользователей предоставляются на условиях лицензии cc by-sa. rev 2021.10.15.40479

Нажимая «Принять все файлы cookie» вы соглашаетесь, что Stack Exchange может хранить файлы cookie на вашем устройстве и раскрывать информацию в соответствии с нашей Политикой в отношении файлов cookie.

Источник

Почему не работает код с циклом forEach?

0xD34F, смотреть я умею) а вот не умею читать ошибки, ну вот пишет в консоли:
Uncaught TypeError: images.forEach is not a function at index.js:6

Ну вот что можно понять с сообщения «is not a function»?
а ничего
Если б писало сообщение:
unxpected token «)»
То понятно что лишняя скобка, а из моего сообщения в консоли вообще ничего не понятно..

Мерзкая, наглая ложь. Будь это правдой, вы, как минимум, спрашивали бы о причине возникновения конкретной ошибки.

что можно понять с сообщения «is not a function»?

Очень печально, когда люди так разговаривают друг с другом, еще более печально, когда это делает куратор тэга, поскольку это дает пример другим — вот оно нормальное общение — загнобить человека только потому, что он начинающий и не владеет навыками понимания ошибок.

Действительно программирование что-то настолько важное, что требует подобного стиля общения?

Веб-форум — платформа для общения между пользователями интернета на одну тему или на несколько тем (зависит от специализации форума).

q&a — страница, по типу вопрос-ответ.

3. В процессе создания вопроса пользователь Сервиса обязан:

3.4. Помнить о том, что сервис вопросов и ответов «Тостер» не является форумом, чатом или социальной сетью. Следует избегать употребления речевых оборотов, характерных для этих типов ресурсов. Вопрос и его описание не должны содержать приветствий и прочих «лирических отступлений».

Я не задавал вопрос и не писал описание к вопросу. Вам стоит внимательней прочитать этот пункт.

5.1 — анимэшник оскорбление? Если человек любит фильмы и его называет киноман или человек очень любит играть в игры, его называют задрот. Киноман и задрот оскорбления?

5.14 — ну тут такое, ты ведь тоже пишешь получается флуд, когда мне отвечаешь. Тут непродуманность этого лендинга, решение вижу в два варианта. Реализация личных сообщений или создание обертки для сообщения тегом оффтоп.

8.2 — опять же, проблема исходит от того, что нет личных сообщений, это раз. Три, это то, что мои сообщения модератору не есть обязательными к ответу.

Модератор может воспользоваться пунктом правил 8.3 и это дает ему право, не отслеживать мои дискуссии, раз я нарушил правило 5.1. Если ты мне отвечаешь, то я ничего не нарушил.
И раз уж на то пошло, почему не описаны в каждом пункте, на сколько дается бан.

Источник

Все способы перебора массива в JavaScript

Содержание:

I. Перебор настоящих массивов

1. Метод forEach и родственные методы

Если ваш проект рассчитан на поддержку возможностей стандарта ECMAScript 5 (ES5), вы можете использовать одно из его нововведений — метод forEach.

В общем случае использование forEach требует подключения библиотеки эмуляции es5-shim для браузеров, не имеющих нативной поддержки этого метода. К ним относятся IE 8 и более ранние версии, которые до сих пор кое-где еще используются.

К достоинствам forEach относится то, что здесь не нужно объявлять локальные переменные для хранения индекса и значения текущего элемента массива, поскольку они автоматически передаются в функцию обратного вызова (колбек) в качестве аргументов.

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

forEach предназначен для перебора всех элементов массива, но кроме него ES5 предлагает еще несколько полезных методов для перебора всех или некоторых элементов плюс выполнения при этом каких-либо действий с ними:

  • every — возвращает true , если для каждого элемента массива колбек возвращает значение приводимое к true .
  • some — возвращает true , если хотя бы для одного элемента массива колбек возвращает значение приводимое к true .
  • filter — создает новый массив, включающий те элементы исходного массива, для которых колбек возвращает true .
  • map — создает новый массив, состоящий из значений возращаемых колбеком.
  • reduce — сводит массив к единственному значению, применяя колбек по очереди к каждому элементу массива, начиная с первого (может быть полезен для вычисления суммы элементов массива и других итоговых функций).
  • reduceRight — работает аналогично reduce, но перебирает элементы в обратном порядке.

2. Цикл for

Старый добрый for рулит:

Если длина массива неизменна в течение всего цикла, а сам цикл принадлежит критическому в плане производительности участку кода (что маловероятно), то можно использовать «более оптимальную» версию for с хранением длины массива:

Теоретически этот код должен выполняться чуть быстрее, чем предыдущий.

Если порядок перебора элементов не важен, то можно пойти еще дальше в плане оптимизации и избавиться от переменной для хранения длины массива, изменив порядок перебора на обратный:

Тем не менее, в современных движках JavaScript подобные игры с оптимизацией обычно ничего не значат.

3. Правильное использование цикла for. in

Если вам посоветуют использовать цикл for. in , помните, что перебор массивов — не то, для чего он предназначен. Вопреки распространенному заблуждению цикл for. in перебирает не индексы массива, а перечислимые свойства объекта.

Тем не менее, в некоторых случаях, таких как перебор разреженных массивов, for. in может оказаться полезным, если только соблюдать при этом меры предосторожности, как показано в примере ниже:

В данном примере на каждой итерации цикла выполняется две проверки:

  1. то, что массив имеет собственное свойство с именем key (не наследованное из его прототипа).
  2. то, что key — строка, содержащая десятичную запись целого числа, значение которого меньше 4294967294 . Откуда берется последнее число? Из определения индекса массива в ES5, из которого следует, что наибольший индекс, который может иметь элемент в массиве: (2^32 — 2) = 4294967294 .

Конечно, такие проверки отнимут лишнее время при выполнении цикла. Но в случае разреженного массива этот способ более эффективен, чем цикл for , поскольку в этом случае перебираются только те элементы, которые явно определены в массиве. Так, в примере выше будет выполнено всего 3 итерации (для индексов 0, 10 и 10000) — против 10001 в цикле for .

Чтобы не писать такой громоздкий код проверок каждый раз, когда требуется перебор массива, можно оформить его в виде отдельной функции:

Тогда тело цикла из примера значительно сократится:

Рассмотренный выше код проверок является универсальным, подходящим для всех случаев. Но вместо него можно использовать более короткую версию, хотя формально и не совсем правильную, но, тем не менее, подходящую для большинства случаев:

4. Цикл for. of (неявное использование итератора)

ES6, пока все еще пребывающий в статусе черновика, должен ввести в JavaScript итераторы.

Итератор — это реализуемый объектом протокол, который определяет стандартный способ получения последовательности значений (конечной или бесконечной).
Итератор — это объект, в котором определен метод next() — функция без аргументов, возвращающая объект с двумя свойствами:

  1. done ( boolean ) — принимает значение true , если итератор достиг конца итерируемой последовательности. В противном случае имеет значение false .
  2. value — определяет значение, возвращаемое итератором. Может быть не определено (отсутствовать), если свойство done имеет значение true .

Многие встроенные объекты, в т.ч. настоящие массивы, имеют итераторы по умолчанию. Простейший способ применения итератора в настоящих массивах — использовать новую конструкцию for. of .

Пример использования for. of :

В приведенном примере цикл for. of неявно вызывает итератор объекта Array для получения каждого значения массива.

5. Явное использование итератора

Итераторы можно также использовать и явно, правда, в этом случае код становится значительно сложнее, по сравнению с циклом for. of . Выглядит это примерно так:

В данном примере метод Array.prototype.entries возвращает итератор, который используется для вывода значений массива. На каждой итерации entry.value содержит массив вида [ключ, значение] .

II. Перебор массивоподобных объектов

Кроме настоящих массивов, в JavaScript встречаются также массивоподобные объекты. С настоящими массивами их роднит то, что они имеют свойство length и свойства с именами в виде чисел, соответствующие элементам массива. В качестве примеров можно назвать DOM коллекции NodeList и псевдомассив arguments , доступный внутри любой функции/метода.

1. Использование способов перебора настоящих массивов

Как минимум большинство, если не все, способы перебора настоящих массивов могут быть применены для перебора массивоподобных объектов.

Конструкции for и for. in могут быть применены к массивоподобным объектам точно тем же путем, что и к настоящим массивам.

forEach и другие методы Array.prototype также применимы к массивоподобным объектам. Для этого нужно использовать вызов Function.call или Function.apply.

Например, если вы хотите применить forEach к свойству childNodes объекта Node , то это делается так:

Для удобства повторного использования этого приема, можно объявить ссылку на метод Array.prototype.forEach в отдельной переменной и использовать ее как сокращение:

Если в массивоподобном объекте имеется итератор, то его можно использовать явно или неявно для перебора объекта таким же способом, как и для настоящих массивов.

2. Преобразование в настоящий массив

Есть также еще один, очень простой, способ перебора массивоподобного объекта: преобразовать его в настоящий массив и использовать любой из рассмотренных выше способов перебора настоящих массивов. Для преобразования можно использовать универсальный метод Array.prototype.slice , который может быть применен к любому массивоподобному объекту. Делается это очень просто, как показано в примере ниже:

Например, если вы хотите преобразовать коллекцию NodeList в настоящий массив, вам нужен примерно такой код:

Источник

Array.prototype.forEach()

Метод forEach() выполняет указанную функцию один раз для каждого элемента в массиве.

Источник этого интерактивного примера хранится в GitHub. Если вы хотите внести вклад в проект интерактивных примеров, пожалуйста, клонируйте https://github.com/mdn/interactive-examples и отправьте нам pull request.

Синтаксис

Параметры

Возвращаемое значение

Описание

Метод forEach() выполняет функцию callback один раз для каждого элемента, находящегося в массиве в порядке возрастания. Она не будет вызвана для удалённых или пропущенных элементов массива. Однако, она будет вызвана для элементов, которые присутствуют в массиве и имеют значение undefined .

Функция callback будет вызвана с тремя аргументами:

  • значение элемента (value)
  • индекс элемента (index)
  • массив, по которому осуществляется проход (array)

Если в метод forEach() был передан параметр thisArg , при вызове callback он будет использоваться в качестве значения this . В противном случае, в качестве значения this будет использоваться значение undefined . В конечном итоге, значение this , наблюдаемое из функции callback , определяется согласно обычным правилам определения this , видимого из функции .

Диапазон элементов, обрабатываемых методом forEach() , устанавливается до первого вызова функции callback . Элементы, добавленные в массив после начала выполнения метода forEach() , не будут посещены функцией callback . Если существующие элементы массива изменятся, значения, переданные в функцию callback , будут значениями на тот момент времени, когда метод forEach() посетит их; удалённые элементы посещены не будут. Если уже посещённые элементы удаляются во время итерации (например, с помощью shift() ), последующие элементы будут пропущены. ( Смотри пример ниже )

Примечание: Не существует способа остановить или прервать цикл forEach() кроме как выбрасыванием исключения. Если вам необходимо такое поведение, метод forEach() неправильный выбор.

Досрочное прекращение может быть достигнуто с:

Если нужно протестировать элементы массива на условие и нужно вернуть булево значение, вы можете воспользоваться методами every() , some() , find() или findIndex() .

Метод forEach() выполняет функцию callback один раз для каждого элемента массива; в отличие от методов every() и some() , он всегда возвращает значение undefined .

Источник

Читайте также:  Как настроить два наушника xiaomi
Оцените статью