В Java вы можете использовать for
цикл для обхода объектов в массиве следующим образом:
String[] myStringArray = {"Hello", "World"};
for (String s : myStringArray)
{
// Do something
}
Можете ли вы сделать то же самое в JavaScript?
javascript
arrays
loops
for-loop
Марк Шиманский
источник
источник
for-in
цикл перечисляет свойства объекта без определенного порядка, а также перечисляет унаследованные свойства. .. для перебора массивов всегда рекомендуется использовать последовательные циклы ...in
иof
это можно использовать и делать разные вещи. Тогда у вас также естьforEach
и уродливый и раздражающий цикл на основе индекса. Любой другой современный язык делает зацикливание на коллекции простым и понятным, без сюрпризов и путаницы. JS тоже может, но это не так.Ответы:
У вас есть несколько вариантов:
1. Последовательный
for
цикл:Pros
break
иcontinue
операторы управления потокомCons
2. Array.prototype.forEach
Спецификация ES5 представила множество полезных методов массива, один из них,
Array.prototype.forEach
и он дает нам краткий способ перебора массива:Прошло почти десять лет с момента написания спецификации ES5 (декабрь 2009 г.), и она была реализована практически всеми современными механизмами в настольных, серверных и мобильных средах, поэтому их безопасно использовать.
А с синтаксисом функции стрелки ES6 это еще более кратко:
Функции со стрелками также широко применяются, если только вы не планируете поддерживать древние платформы (например, IE11); ты тоже в безопасности.
Pros
Cons
break
/continue
Обычно вы можете заменить необходимость
break
выхода из императивных циклов, отфильтровывая элементы массива перед их повторением, например:Имейте в виду, что если вы итерируете массив для создания другого массива из него , вы должны использовать
map
, я видел этот анти-паттерн много раз.Анти-шаблон:
Правильный вариант использования карты :
Кроме того , если вы пытаетесь уменьшить массив до значения, например, вы хотите , чтобы суммировать массив чисел, вы должны использовать уменьшить метод.
Анти-шаблон:
Правильное использование уменьшить :
3.
for-of
Заявление ES6Стандарт ES6 вводит концепцию итерируемых объектов и определяет новую конструкцию для прохождения данных -
for...of
оператор.Этот оператор работает для любого типа итерируемого объекта, а также для генераторов (любого объекта, у которого есть
[Symbol.iterator]
свойство).Объекты массива по определению являются встроенными итераторами в ES6, поэтому вы можете использовать для них следующий оператор:
Pros
break
/continue
).Cons
Не используйте
for...in
@zipcodeman предлагает использовать
for...in
оператор, но для итерации массивовfor-in
следует избегать, этот оператор предназначен для перечисления свойств объекта.Он не должен использоваться для объектов, подобных массиву, потому что:
Второй момент заключается в том, что это может создать много проблем, например, если вы расширите
Array.prototype
объект, добавив туда метод, это свойство также будет перечислено.Например:
Приведенный выше код будет консоль журнала "a", "b", "c" и "foo!".
Это может быть особенно проблемой, если вы используете какую-то библиотеку, которая в значительной степени опирается на расширение собственных прототипов (например, MooTools).
for-in
Заявление , как я уже говорил здесь , чтобы перечислить свойство объекта, например:В приведенном выше примере
hasOwnProperty
метод позволяет перечислять только собственные свойства , вот и все, только те свойства, которые физически имеет объект, без унаследованных свойств.Я бы порекомендовал вам прочитать следующую статью:
источник
false
,undefined
,0
,""
,NaN
.Да, если ваша реализация включает
for
...of
функцию, представленную в ECMAScript 2015 (выпуск "Harmony") ... который в наши дни является довольно безопасным предположением.Это работает так:
Или еще лучше, так как ECMAScript 2015 также предоставляет переменные в области блока:
(Переменная
s
отличается на каждой итерации, но все еще может быть объявленаconst
внутри тела цикла, если она там не изменена.)Замечание о разреженных массивах: массив в JavaScript может на самом деле не хранить столько элементов, сколько сообщил его
length
; это сообщаемое число просто на единицу больше, чем самый высокий индекс, при котором хранится значение. Если массив содержит меньше элементов, чем указано в его длине, он называется разреженным . Например, вполне допустимо иметь массив с элементами только по индексам 3, 12 и 247; в s для любых недостающих элементов, или вы хотите обрабатывать только элементы фактически присутствующие? Существует множество приложений для обоих подходов; это зависит только от того, для чего вы используете массив.length
такого массива сообщается как 248, хотя на самом деле только хранить 3 значения. Если вы попытаетесь получить доступ к элементу по какому-либо другому индексу, массив будет иметьundefined
значение там. Поэтому, когда вы хотите «пройтись» по массиву, у вас возникает вопрос: хотите ли вы пройтись по всему диапазону, указанному его длиной и процессом?undefined
Если вы выполняете итерацию массива с помощью
for
..of
, тело цикла выполняетсяlength
раз, а для переменной управления цикла устанавливается значениеundefined
для любых элементов, фактически не представленных в массиве. В зависимости от деталей вашего кода «делать что-то», такое поведение может быть тем, что вам нужно, но если нет, вам следует использовать другой подход.Конечно, некоторые разработчики не имеют иного выбора , кроме как использовать другой подход в любом случае, потому что по какой - то причине они ориентации версию JavaScript , который еще не поддерживается
for
...of
.Пока ваша реализация JavaScript совместима с предыдущей версией спецификации ECMAScript (которая исключает, например, версии Internet Explorer до 9), вы можете использовать
Array#forEach
метод итератора вместо цикла. В этом случае вы передаете функцию, которая будет вызываться для каждого элемента в массиве:В отличие от
for
...of
,.forEach
вызывает функцию только для элементов, которые действительно присутствуют в массиве. Если передать наш гипотетический массив с тремя элементами и длиной 248, он будет вызывать функцию только три раза, а не 248 раз. Он также различает отсутствующие элементы и элементы, которые на самом деле установленыundefined
; для последнего он по-прежнему будет вызывать функцию, передаваяundefined
в качестве аргумента. Если это, как вы хотите обрабатывать разреженные массивы,.forEach
может быть путь , даже если интерпретатор поддерживаетfor
...of
.Последний вариант, который работает во всех версиях JavaScript, - это явный цикл подсчета . Вы просто считаете от 0 до единицы меньше длины и используете счетчик в качестве индекса. Основной цикл выглядит так:
Одним из преимуществ этого подхода является то, что вы можете выбрать способ обработки разреженных массивов; приведенный выше код будет работать тело цикла полные
length
раз, сs
набором дляundefined
любых недостающих элементов, так же какfor
..of
. Если вы вместо этого хотите обрабатывать только реально существующие элементы разреженного массива, например.forEach
, вы можете добавить простойin
тест в индекс:Присвоение значения длины локальной переменной (в отличие от включения полного
myStringArray.length
выражения в условие цикла) может существенно повлиять на производительность, поскольку оно пропускает поиск свойств каждый раз; при использовании Rhino на моей машине ускорение составляет 43%.Вы можете увидеть, что кэширование длины выполняется в предложении инициализации цикла, например так:
Явный цикл подсчета также означает, что у вас есть доступ к индексу каждого значения, если вы этого хотите. Индекс также передается в качестве дополнительного параметра функции, которую вы передаете
forEach
, так что вы также можете получить к нему доступ таким образом:for
...of
не дает индекс, связанный с каждым объектом, но пока объект, над которым вы перебираете, фактически являетсяArray
(for
..of
работает для других повторяемых типов, которые могут не иметь этого метода), вы можете использовать массив Метод #entries, чтобы изменить его на массив пар [index, item], а затем выполнить итерацию:for
...in
синтаксис уже отмечалось другими для цикла по свойствам объекта; так как массив в JavaScript - это просто объект с числовыми именами свойств (и автоматически обновляемымlength
свойством), вы можете теоретически зациклить массив с ним. Но проблема заключается в том, что он не ограничивается числовыми значениями свойств (помните, что даже методы на самом деле являются просто свойствами, значение которых является замыканием), и при этом не гарантируется, что они будут повторяться в числовом порядке. Следовательно, синтаксисfor
... не должен использоваться для циклического перемещения по массивам.in
источник
i in myStringArray
в своем примере? Как это может быть ложным?a=[1,2,3,4]; delete a[2]; for (j in a) { console.log(j); }
выходы 0, 1, 3 и 4.a.length
по-прежнему 5.for j in a
. Я демонстрирую, чтоin
проверка не является избыточной, как вы утверждали, показывая все индексы и показывая, что есть один между 0, аlength-1
его нет. Я мог бы также просто напечатать2 in a
, что действительноfalse
, несмотря на то, что вы сказали, что это невозможно.Вы можете использовать
map
этот метод функционального программирования, который также доступен на других языках, таких как Python и Haskell .Общий синтаксис:
В общем случае
func
будет принимать один параметр, который является элементом массива. Но в случае JavaScript он может принимать второй параметр, который является индексом элемента, и третий параметр, который является самим массивом.Возвращаемым значением
array.map
является другой массив, поэтому вы можете использовать его следующим образом:И теперь х есть
[10,20,30,40]
.Вам не нужно писать функцию в строке. Это может быть отдельной функцией.
который будет в некотором роде эквивалентен:
За исключением того, что вы не получите
new_list
.источник
Array.forEach
.map
для генерации нового массива.Array.prototype.map
метод является частью стандарта ECMAScript 5-й редакции, еще не доступен во всех реализациях (например, в IE его нет), также для итерации по массиву, я думаю, чтоArray.prototype.forEach
метод более семантически корректен ... также, пожалуйста, не t-предложение, см. мой ответ для более подробной информации :)forEach
иmap
заключается в том, что первый не возвращает результаты итерации.map
(иногда иначеcollect
, но очень отличается отapply
) специально для преобразования каждого элемента массива в соответствующий результат; это отображение 1 к 1 , отсюда и название. Это часть целого семейства операций, которые включаютreduce
(который производит один результат из всего массива) иfilter
(который производит подмножество исходного массива) и так далее. В то время какforEach
просто что-то делает с каждым элементом, семантика не указана.В JavaScript не рекомендуется проходить через массив с циклом for-in, но лучше использовать
for
цикл, такой как:Он также оптимизирован («кэширует» длину массива). Если вы хотите узнать больше, прочитайте мой пост на эту тему .
источник
++i
вместоi++
++i
это оптимизация старой школы, которую современные компиляторы делают для вас в цикле for уже давно :) stackoverflow.com/a/1547433/1033348i_stop
илиi_end
вместоlen
. Он так же удобочитаем (если не больше!), И вы, естественно, избежите такого рода проблем (поскольку ваш другой цикл получит, например,j_stop
).for (пусть из myStringArray) {
(Непосредственно отвечая на ваш вопрос: теперь вы можете!)
Большинство других ответов верны, но они не упоминают (на момент написания статьи), что в ECMA Script
62015 появился новый механизм выполнения итерации -for..of
цикл.Этот новый синтаксис является наиболее элегантным способом итерации массива в javascript (если вам не нужен индекс итерации).
В настоящее время он работает с Firefox 13+, Chrome 37+ и изначально не работает с другими браузерами (см. Совместимость браузера ниже). К счастью, у нас есть JS-компиляторы (такие как Babel ), которые позволяют нам использовать функции следующего поколения сегодня.
Он также работает на узле (я тестировал его на версии 0.12.0).
Итерация массива
Итерация массива объектов
Итерация генератора:
(пример извлечен из https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/for...of )
Таблица совместимости: http://kangax.github.io/es5-compat-table/es6/#For..of циклов
Spec: http://wiki.ecmascript.org/doku.php?id=harmony:iterators
}
источник
const s
вместоvar s
var s of arr
выполнения почти удвоилось (в 1,9 раза) по сравнению с использованием простого счетчика цикла for и извлечения элементов по индексу в nodejsOpera, Safari, Firefox и Chrome теперь все совместно используют набор улучшенных методов Array для оптимизации многих распространенных циклов.
Вам могут не понадобиться все из них, но они могут быть очень полезными, или были бы, если бы каждый браузер поддерживал их.
Mozilla Labs опубликовала алгоритмы, которые они и WebKit используют, так что вы можете добавить их самостоятельно.
Фильтр возвращает массив элементов, которые удовлетворяют некоторому условию или тесту.
each возвращает true, если каждый член массива проходит тест.
некоторые возвращают истину, если они проходят тест.
forEach запускает функцию для каждого члена массива и ничего не возвращает.
Карта похожа на forEach, но она возвращает массив результатов операции для каждого элемента.
Все эти методы берут функцию для своего первого аргумента и имеют необязательный второй аргумент, который является объектом, область которого вы хотите наложить на члены массива, когда они перебирают функцию.
Игнорируйте это, пока вам это не нужно.
indexOf и lastIndexOf находят подходящую позицию первого или последнего элемента, которая точно соответствует его аргументу.
источник
вступление
Со времени учебы в колледже я программировал на Java, JavaScript, Pascal, ABAP учился , PHP, Progress 4GL, C / C ++ и, возможно, на некоторых других языках, о которых я не могу думать сейчас.
Хотя все они имеют свои собственные лингвистические особенности, каждый из этих языков имеет много общих базовых понятий. Такие понятия включают процедуры / функции,
IF
-statements,FOR
-loops иWHILE
-loops.Традиционная
for
петляТрадиционный
for
цикл состоит из трех компонентов:Эти три компонента отделены друг от друга
;
символом. Содержимое для каждого из этих трех компонентов является необязательным, что означает, что следующее является наиболее минимальнымfor
возможным циклом:Конечно, вам нужно будет включить
if(condition === true) { break; }
илиif(condition === true) { return; }
где-то внутри этогоfor
-loop, чтобы заставить его перестать работать.Обычно, однако, инициализация используется для объявления индекса, условие используется для сравнения этого индекса с минимальным или максимальным значением, а запоздалая мысль используется для увеличения индекса:
Использование традиционного
for
цикла для обхода массиваТрадиционный способ перебрать массив:
Или, если вы предпочитаете цикл в обратном направлении, вы делаете это:
Однако возможны многие варианты, например, такие:
... или этот ...
... или этот:
То, что работает лучше всего, в значительной степени зависит как от личного вкуса, так и от конкретного варианта использования, который вы реализуете.
Обратите внимание, что каждый из этих вариантов поддерживается всеми браузерами, включая очень старые!
while
циклОдной из альтернатив
for
цикла являетсяwhile
цикл. Чтобы перебрать массив, вы можете сделать это:Как и традиционные
for
циклы,while
циклы поддерживаются даже в самых старых браузерах.Также обратите внимание, что каждый цикл while можно переписать как
for
цикл. Например, приведенныйwhile
выше цикл ведет себя точно так же, как этотfor
-loop:For...in
а такжеfor...of
В JavaScript вы также можете сделать это:
Однако это следует использовать с осторожностью, поскольку оно не ведет себя так же, как традиционный
for
цикл во всех случаях, и существуют потенциальные побочные эффекты, которые необходимо учитывать. См. Почему использование «for ... in» с итерацией массива - плохая идея? Больше подробностей.Как альтернатива
for...in
, теперь есть и дляfor...of
. В следующем примере показана разница междуfor...of
циклом иfor...in
циклом:Кроме того, вы должны учитывать, что ни одна из версий Internet Explorer не поддерживает
for...of
( Edge 12+ ) иfor...in
требует как минимум Internet Explorer 10.Array.prototype.forEach()
Альтернативой
for
-loops являетсяArray.prototype.forEach()
следующий синтаксис:Array.prototype.forEach()
поддерживается всеми современными браузерами, а также Internet Explorer 9 и более поздними версиями.Библиотеки
Наконец, многие служебные библиотеки также имеют свои собственные
foreach
варианты. AFAIK, три самых популярных из них:jQuery.each()
в jQuery :_.each()
в Underscore.js :_.forEach()
, в Lodash.js :источник
Используйте цикл while ...
журналы: «один», «два», «три»
И для обратного порядка, еще более эффективный цикл
журналы: «три», «два», «один»
Или классическая
for
петляжурналы: «один», «два», «три»
Ссылка: http://www.sitepoint.com/google-closure-how-not-to-write-javascript/
источник
Если вам нужен краткий способ написать быстрый цикл, и вы можете выполнить итерацию в обратном порядке:
Это имеет преимущество кэширования длины (аналогично
for (var i=0, len=myArray.length; i<len; ++i)
и в отличие отfor (var i=0; i<myArray.length; ++i)
) при меньшем наборе символов.Даже в некоторых случаях вы должны выполнять итерацию в обратном порядке, например, при выполнении итерации по живому NodeList, где вы планируете удалять элементы из DOM во время итерации.
источник
for (var i=0,len=array.length;i<len;++i)
был общий, разумный цикл для записи.Некоторые случаи использования циклического перемещения по массиву в функциональном программировании в JavaScript:
1. Просто перебрать массив
Примечание: Array.prototype.forEach (), строго говоря, не является функциональным способом, так как функция, которую он принимает в качестве входного параметра, не должна возвращать значение, которое, таким образом, не может рассматриваться как чистая функция.
2. Проверьте, проходит ли какой-либо из элементов массива тест
3. Преобразовать в новый массив
Примечание. Метод map () создает новый массив с результатами вызова предоставленной функции для каждого элемента в вызывающем массиве.
4. Подведите итог конкретного свойства и рассчитайте его среднее
5. Создайте новый массив на основе оригинала, но не изменяя его
6. Подсчитайте количество каждой категории
7. Получить подмножество массива на основе определенных критериев
Примечание. Метод filter () создает новый массив со всеми элементами, которые проходят тест, реализованный предоставленной функцией.
8. Сортировать массив
9. Найти элемент в массиве
Метод Array.prototype.find () возвращает значение первого элемента в массиве, которое удовлетворяет предоставленной функции тестирования.
Ссылки
источник
Есть способ сделать это, когда у вас очень мало неявной области действия в вашем цикле и вы покончили с дополнительными переменными.
Или, если вы действительно хотите получить идентификатор и получить действительно классический
for
цикл:Современные браузеры всех методы поддержки итераторов
forEach
,map
,reduce
,filter
а также множество других методов на массив прототипе .источник
Существуют различные способы просмотра массива в JavaScript.
Общий цикл:
ES5 для каждого:
jQuery.each:
Посмотрите это для получения подробной информации или вы также можете проверить MDN для циклического прохождения массива в JavaScript и использования jQuery для проверки jQuery для каждого .
источник
Я бы настоятельно рекомендовал использовать библиотеку underscore.js . Он предоставляет вам различные функции, которые вы можете использовать для перебора массивов / коллекций.
Например:
источник
underscore
если ECMA-262 был добавленforEach
метор. Родной код всегда лучше.Цикл массива:
Объектный цикл:
источник
Да , вы можете сделать то же самое в JavaScript, используя цикл, но не ограничиваясь этим, в JavaScript есть много способов сделать цикл над массивами. Представьте, что у вас есть этот массив ниже, и вы хотите сделать цикл над ним:
Это решения:
1) для цикла
for
Цикл не является обычным способом циклический массивами в JavaScript, но не рассматриваются в качестве самых быстрых решений для больших массивов:2) Пока цикл
Цикл while считается самым быстрым способом обхода длинных массивов, но обычно он меньше используется в коде JavaScript:
3) Делайте, пока
A
do while
делает то же самое, что иwhile
с некоторой разницей в синтаксисе, как показано ниже:Это основные способы создания циклов JavaScript, но есть еще несколько способов сделать это.
Также мы используем
for in
цикл для зацикливания объектов в JavaScript.Также обратите внимание на
map()
,filter()
,reduce()
функций и т.д. на массив в JavaScript. Они могут делать вещи намного быстрее и лучше, чем использоватьwhile
иfor
.Это хорошая статья, если вы хотите больше узнать об асинхронных функциях над массивами в JavaScript.
Читать дальше >> здесь :
источник
Если кого-то интересует производительность нескольких механизмов, доступных для итераций Array, я подготовил следующие тесты JSPerf:
https://jsperf.com/fastest-array-iterator
Результаты:
Традиционный
for()
итератор, безусловно, является самым быстрым методом, особенно при использовании с кэшированной длиной массива .Array.prototype.forEach()
ИArray.prototype.map()
методы являются самыми медленными приближениями, вероятно , как следствие накладных расходов вызова функции .источник
i = i +1
вместоi++
Если вы используете библиотеку jQuery, рассмотрите возможность использования http://api.jquery.com/jQuery.each/
Из документации:
источник
Я еще не видел этот вариант, который лично мне нравится больше всего:
Учитывая массив:
Вы можете зациклить его, даже не обращаясь к свойству длины:
Посмотрите это JsFiddle, демонстрирующее, что: http://jsfiddle.net/prvzk/
Это работает только для массивов, которые не разрежены. Это означает, что в каждом индексе массива есть значение. Однако я обнаружил, что на практике я редко использую разреженные массивы в JavaScript ... В таких случаях обычно гораздо проще использовать объект в качестве карты / хеш-таблицы. Если у вас есть разреженный массив, и вы хотите зациклить 0 .. length-1, вам нужна конструкция for (var i = 0; i <someArray.length; ++ i), но вам все еще нужен
if
внутренний цикл проверить, действительно ли определен элемент в текущем индексе.Кроме того, как CMS упоминает в комментарии ниже, вы можете использовать это только для массивов, которые не содержат ложных значений. Массив строк из примера работает, но если у вас есть пустые строки или числа, которые равны 0 или NaN, и т. Д., Цикл преждевременно оборвется. Опять же, на практике это вряд ли проблема для меня, но это то, что нужно иметь в виду, что заставляет задуматься об этом, прежде чем использовать его ... Это может дисквалифицировать его для некоторых людей :)
Что мне нравится в этом цикле:
Причина, по которой это работает, заключается в том, что спецификация массива требует, чтобы при чтении элемента из индекса> = длины массива он возвращал неопределенное значение. Когда вы пишете в такое место, оно фактически обновляет длину.
Для меня эта конструкция наиболее близко имитирует синтаксис Java 5, который мне нравится:
... с дополнительным преимуществом знания о текущем индексе внутри цикла
источник
0
,false
,NaN
,null
илиundefined
, еще до того,i
достигает длины, например: jsfiddle.net/prvzk/1(item=someArray[i]) !== undefined
.Есть метод для перебора только собственных свойств объекта, не считая свойств прототипа:
но он все равно будет перебирать пользовательские свойства.
В JavaScript любое пользовательское свойство может быть назначено любому объекту, включая массив.
Если один хочет перебрать разреженный массив,
for (var i = 0; i < array.length; i++) if (i in array)
илиarray.forEach
сes5shim
должно быть использован.источник
for (var i in array) if (++i)
?Есть несколько способов сделать это в JavaScript. Первые два примера являются примерами JavaScript. Третий использует библиотеку JavaScript, то есть jQuery использует
.each()
функцию.источник
for...in
следует избегать для объектов, подобных массивуСамый элегантный и быстрый способ
http://jsperf.com/native-loop-performance/8
Отредактировано (потому что я был неправ)
Сравнение методов для циклического прохождения массива из 100000 элементов и выполнения минимальной операции с новым значением каждый раз.
Приготовление:
тесты:
источник
Оптимизированный подход заключается в кэшировании длины массива и использовании одного шаблона var, инициализирующего все переменные одним ключевым словом var.
Если порядок итераций не имеет значения, чем вы должны попробовать обратный цикл, он будет самым быстрым, так как он сокращает нагрузку на тестирование условий и уменьшает значение в одном выражении:
или лучше и чище использовать цикл while:
источник
В JavaScript существует очень много решений для создания цикла.
Код ниже популярные
источник
Если вы хотите использовать jQuery, в его документации есть хороший пример:
источник
На мой взгляд, лучший способ - использовать функцию Array.forEach. Если вы не можете использовать это, я бы предложил получить полифилл из MDN. Чтобы сделать его доступным, это, безусловно, самый безопасный способ перебора массива в JavaScript.
Array.prototype.forEach ()
Итак, как и предполагали другие, это почти всегда то, что вы хотите:
Это гарантирует, что все, что вам нужно в области обработки массива, остается в этой области, и что вы обрабатываете только значения массива, а не свойства объекта и другие члены, что и
for ..
происходит.Используя обычный стиль C
for
цикла в работает в большинстве случаев. Просто важно помнить, что все внутри цикла разделяет свою область с остальной частью вашей программы, {} не создает новую область.Следовательно:
выдаст «11» - что может или не может быть то, что вы хотите.
Рабочий пример jsFiddle: https://jsfiddle.net/workingClassHacker/pxpv2dh5/7/
источник
Это не на 100% идентично, но похоже:
источник
Например, я использовал в консоли Firefox:
источник
Намного чище ...
источник
z.forEach(j => console.log(j));
.Краткий ответ: да. Вы можете сделать с этим:
В консоли браузера вы можете увидеть что-то вроде «element1», «element2» и т. Д. Напечатано.
источник
Вы можете использовать
Array.prototype.forEach(...)
:Или
Array.prototype.map(...)
:Или jquery или для циклических способов, упомянутых ранее.
источник