Массивы в JavaScript
![Массивы в JavaScript](/images/articles/javascript-massivy.jpg)
Массивы - это тип данных, который может содержать много значений. Другими словами, переменная типа массив - это переменная, содержащая в себе не одно значение (как было раньше), а много значений одновременно.
Общий вид создания массива в JavaScript такой:
var name = new Array(value_1, value_2, ..., value_n);
Таким образом, переменная с именем "name" содержит в себе массив со значениями: value_1, value_2, ..., value_n. Обращаться к массиву надо так:
name[i];
То есть пишется имя массива, а в квадратных скобках указывается порядковый номер массива. Причём, нумерация начинается с нуля. То есть первый элемент имеет индекс 0.
Давайте создадим и выведем второй элемент массива.
var arr = new Array(3, 4, 0, true, "string");
document.write(arr[1]);
Запустив этот скрипт, у нас в окне браузера появится 4. Теперь давайте выведем весь массив в окно браузера:
for (i = 0; i < arr.length; i++)
document.write(arr[i]);
Для того, чтобы вывести весь массив можно воспользоваться циклом. Здесь мы перебираем переменную i от 0 до длины массива (arr.length - это свойство, которое содержит длину массива arr). Затем мы выводим элемент массива, указав переменную итерации - i.
Давайте теперь мы решим такую задачу: пользователь последовательно вводит 5 чисел, которые мы вводим в массив, а потом выводим его в окно браузера.
var arr = new Array();
for (i = 0; i < 5; i++)
arr[i] = prompt("Введите " + (i + 1) + "-ое число");
for (i = 0; i < arr.length; i++)
document.write(arr[i]);
Вначале мы создаём переменную, которая отвечает за массив. Дальше мы в цикле запрашиваем у пользователя по очереди 5 чисел. А потом в цикле выводим полученный массив в браузер.
Эта вся теория по созданию массивов в JavaScript. Теперь я Вам советую закрепить полученный материал и попытаться решить такую задачу: пользователь вводит последовательно 5 чисел, которые затем помещаются в массив. Затем создать функцию, которая принимает в качестве параметра массив и возвращает максимальный элемент в массиве. Выведите максимальный элемент массива, используя созданную Вами функцию.
Удачи!
-
-
Михаил Русаков
Комментарии (41):
Михаил, а почему зависает скрипт? <script language = "javascript"> var arr = new Array(3, 4, 0, true, "string"); for (i = 0; arr.length; i++) document.write(arr[i]); </script>
Ответить
Цикл неправильный, вот for (i = 0; i < arr.length; i++)
Ответить
Ну, тогда статью правьте. :-) После слов "Запустив этот скрипт, у нас в окне браузера появится 4. Теперь давайте выведем весь массив в окно браузера:..."
Ответить
Уже исправил, спасибо, что заметили!
Ответить
Михаил, не могу усвоить, когда нужно круглые скобки ( {} ) ставить, а когда нет. Вот здесь, например, нужно? <script language = "javascript"> var arr = new Array(3, 4, 0, true, "string"); for (i = 0; i < arr.length; i++) document.write(arr[i]); document.write("<br>"); document.write(arr[2]); </script>
Ответить
Когда больше 1-го оператора внутри цикла (или, например, условия), то обязательно надо ставить фигурные скобки. Если только 1 оператор, то ставить необязательно.
Ответить
Так правильно? for () { document.write(); document.write(); document.write(); }
Ответить
Да, если Вы хотите, чтобы document.write() в каждой итерации выполнялся по 3 раза.
Ответить
Добрый день! Решил вашу задачу, однако при работе данного скрипта при сравнении двух чисел, если одно из них двузначное - то сравнивается первая цифра этого числа, а не само число. Таким образом при задании ряда 2,7,8,12,9 выдается максимальное число 9, а при ряде 2,3,6,8,91 выдает максимаьлное 91. Вот код (с выводом промежуточных результатов): <script language="javascript" type="text/javascript"> var arr = new Array(); for (i = 0; i < 5; i++) arr[i] = prompt("!Введите " + (i + 1) + "-ое число"); document.write(arr+ " //" + arr.length + "<br />" ); function max(arr) { var max = arr[0]; for (i = 1; i < arr.length; i++){ document.write(arr[i] + " "); document.write(max + " "); if (arr[i] > max) max = arr[i]; document.write(max + "<br />"); } return max; } document.write("<br />"+max(arr)); </script>
Ответить
Для этого надо использовать функцию Number(), о которой будет рассказываться в следующих уроках после этого задания, поэтому посмотрите их (как я понял, Вы про курс "Создание и раскрутка сайта от А до Я").
Ответить
Молодец, что решил. Но еще больший молодец, что выложил. Уверен, что найдутся многие, кому это будет интересно. Разумеется, Русакова этим не удивишь. И продвинутые пользователи такие статейки не читают. А для начинающих – такие комментарии большое подспорье. Что не понравилось – на экран выводится всякая хрень. Я взял на себя смелость добавить несколько комментариев, которые наглядно демонстрируют процесс поиска. Вот откомментированный скрипт. <script language="javascript" type="text/javascript"> var arr = new Array(); for (i = 0; i < 5; i++) arr[i] = prompt("Введите " + (i + 1) + "-ое число"); document.write("Создан массив: "+"<strong>"+arr.join(", ")+"</strong><br>" ); document.write("<i>Выбираем максимальное значение элемента массива.</i><br><br>"); function max() { var max = arr[0]; //Создается новая переменная, Которой присваиватеся значение первого символа массива. for (i = 1; i < arr.length; i++){ //Цикл выбирает для сравнения последующее число, начиная со второго. document.write("Значение последующего элемента массива - "+ arr[i]+"<br>"); document.write("Сравнение идет с числом - "+max + "<br> "); if (arr[i] > max) max = arr[i]; //Сравнивается предыдущий элемент найденным наибольшим. Полученный максимум вводится в новую переменную document.write( "Для дальнейшего рассмотрения выбирается число "+max + ", как имеющее большую величину.<br><br>"); } return max; } document.write("<br />Максимальное значение элемента в массиве равно - <strong>"+max(arr)+"</strong>"); </script> Только при его запуске нужно учитывать сделанное замечание. Иначе выведется ерунда. Типа, «из двух чисел 9 и 49 выбираем 9, как имеющее большее значение»
Ответить
Большой соблазн, посмотреть и скопировать "готовый код", ну вот надо ли это делать.Лучше самостоятельно голову поломать, так что убегаю с данной статьи до тех пор пока сама не разберусь
Ответить
Добрый вечер! Михаил подскажите пож. если надо один массив с введёнными даными хранить, а другой заполнять с клавиатуры , как бы дополнение к первому массиву. Как лучше это представить, что б понятней было привожу код var vopros = new Array(); var otvet = new Array(); alert ('При ответе на вопросы используйте "да" или "нет"'); vopros [0] = "В древнегреческих мифах назывался 'океаном' река обтекающая всю землю?"; vopros [1] = "По мнению древних римлян, экватор уравнивал земной шар?"; vopros [2] = "Является ли люстра достопримичательностью Большого театра, которую прозвали хрустальным облаком?"; vopros [3] = "Придумал для изготовления денег монетный станок Леонардо де Винчи?"; vopros [4] = "Сакэ - это белое сухое вино?"; for (var i=0; i<vopros.length; i++) { var a = prompt (vopros[i], otvet.unshift([i])); if (otvet[i] == "да") { otvet[i] = "верно"; alert ("верно"); } else if (otvet[i] == "нет") { otvet[i] = "не верно"; alert ("не верно"); } } for (var i=0; i<vopros.length; i++) { document.write (vopros[i]+ "\t" + ":" + "\t" +otvet[i]+ "<br />" + "<br />"); } и выходит, что значения второго массива почему то заполняются цифрами
Ответить
Вы сами записываете в массив ответов цифры, а потом пытаетесь сравнивать их со строками "да" и "нет". А вот переменная 'a', в которую записывается ответ вообще не используется.
Ответить
спасибо
Ответить
а я решила=) сама=) Все корректно работает.Только я немного задание изменила..У меня не конкретно 5 чисел,а столько чисел,сколько ввел ползователь...и из них выбирается максимальное. var mas = new Array(); a = prompt ('vvedite kol elementov v massive'); for (var i = 0; i < a; i++) mas[i] = prompt ('vvedite '+(i+1)+'-ii element'); document.write(' <br/>'); for (var i = 0; i < mas.length; i++) document.write(mas[i]+' '); function poisk(){ for (var i = 0; i < a; i++) { if (mas[i] < mas[i+1]) continue ; else { var k = mas[i]; mas[i] = mas[i+1]; mas[i+1] = k;} } document.write(mas[i]+' '); } document.write(' <br/>'); poisk();
Ответить
Margo, понимаю, много лет прошло, но если ты еще здесь бываешь, то расшифруй пожалуйста вот эту часть своего кода { var k = mas[i]; mas[i] = mas[i+1]; mas[i+1] = k;} Что то не могу понять зачем здесь переменная "к" и какое действие это условие обрабатывает? Михаил если вы сможете ответить, то был бы рад?
Ответить
Сделал с тремя цифрами, знаю что надо делать циклами,т.к. код плохой, но есть ошибка которую не могу понять,вот код <script language = "javascript"> var arr = new Array(); for (i = 0; i < 3; i++) arr[i] = prompt("Введите " + (i + 1) + "-ое число"); function func(a) { if (a[0] > a[1] && a[0] > a[2]) document.write(a[0]) else if (a[1] > a[2])document.write(a[1]); else document.write(a[2]); } func(arr); </script> Если первое число большое, а второе меньше третьего->отображается третье, в чём дело.
Ответить
Функцию Number() надо использовать для преобразования строк из prompt в числа. И дальше, если это сразу проблему не решит, вот это: http://myrusakov.ru/javascript-finderror.html
Ответить
Ответ на задачку: с алертами всё понятно, пример есть в Вашем уроке, далее пользователь ввел данные, работаем с массивом. Считаю этот код гораздо проще предложенных выше из которых я честно говоря мало что понял :) Введенные числа на примере массива MyMass: //5 разных чисел var MyMass=[12,18,22,56,2]; //сортировка чисел по возростанию (Эту строку я подсмотрел в Гугл) MyMass.sort(function(a,b){return a - b}); //Вывод последнего элемента массива с самым большим числом. Отталкивался от длины массива, чтобы в случае чего можно было применить к массивам с большим количеством элементов: document.write(MyMass[MyMass.length -1]);
Ответить
Либо можно было в строке с сортировкой чисел заменить "а - b" на "b - a", тогда числа сортировались бы в сторону уменьшения и самое большое число в массиве было бы первым, тогда последняя строка кода была бы document.write(MyMass[0])... да так даже проще :)
Ответить
prompt всегда возвращает строковое значение , чтоб значение было числом надо просто перед prompt поставить знак "+" , например var x = + prompt("введите число");//x число......... var x =prompt("введите число");//без "+" x - строка///// кстати Михаил , не могли бы вы сделать так чтоб комменты сортировались по дате последние -сверху , думаю так могло быть лучше
Ответить
<script language = "javascript"> var arr = new Array (); for (i=0;i<5;i++) arr[i]=prompt("Введите " + (i+1) + "-ое число"); for (i=0;i<arr.lenght;i++) document.write(arr[i]); function maxArray() { var max=0; for (i=0;i<5;i++) if (arr[i]>max) max=arr[i]; document.write (max); } maxArray(); </script>
Ответить
У Викули код прекрасно работает, если поставить + перед prompt, хотя в коде синтаксическая ошибка:в arr.lenght - надо t и h местами поменять. И что странно, если меняешь - то код перестает работать. Почему???
Ответить
Не понимаю, написал вручную код из последнего примера: var arr = new Array(); for (i = 0; i < 5; i++) arr[i] = prompt("введите " + (i + 1) + "-ое число"); for (i = 0; i < arr.lenght; i++) document.write(arr[i]); -- не выводит на страницу массив. Копирую код с этой страницы -- выводит. Все глаза просмотрел, вроде коды идентичные, так почему ж мой не работает?
Ответить
Iguar,увас набрано: arr.lenght, а надо arr.length
Ответить
new Array(6).join(' ').match(/\s/gi).map(function(i,v){ document.write(i=prompt()); }); Создает объект и сразу удаляет после выполнения.
Ответить
Что-то тут ребята всё усложняют слишком с решением задачи. Разве не проще сделать так: var num = new Array(); for (i = 0 ; i < 5 ; i++) { num[i] = prompt("Введите " + (i + 1) + "-ое число"); } function maxNum(array) { return Math.max.apply(null, array); } console.log(maxNum(num));
Ответить
Рахмет Михаил Русаков за уроки! Три дня убил на то, чтобы выполнить задание, но вроде получилось... Михаил, если в моем коде все правильно, то дай знать, пожалуйста? Правда я вместо 5 элементов в массиве использовал 3. Вот код: <script type="text/javascript"> var arr = new Array(); for (i = 0; i < 3; i++) { arr[i] = +prompt("введите " + (i + 1) + "-ое число"); } function max (arr) { var max = ""; if ((arr[0] > arr[1]) && (arr[0] > arr[2])) {max = arr[0];} else if (arr[1] > arr[2]) {max = arr[1];} else {max = arr[2];} document.write (max); } max (arr); </script>
Ответить
А вот чтобы при вводе не числовых значений (т.е. любых символов кроме чисел) выводило об этом сообщение, то надо функцию изменить на следующую: function max (arr) { var max = ""; if ((arr[0] > arr[1]) && (arr[0] > arr[2])) {max = arr[0];} else if ((arr[1] > arr[2]) && (arr[1] > arr[0])) {max = arr[1];} else if ((arr[2] > arr[1]) && (arr[2] > arr[0])) {max = arr[2];} else if ((arr[0] == arr[1]) && (arr[0] > arr[2])) {max = arr[0];} else if ((arr[0] == arr[2]) && (arr[0] > arr[1])) {max = arr[0];} else if ((arr[1] == arr[2]) && (arr[1] > arr[0])) {max = arr[1];} else if ((arr[0] == arr[1]) && (arr[1] == arr[2])) {max = arr[0];} else alert ("одно из введенных значений не числовое!"); document.write (max); }
Ответить
var arr=new Array; for(i=0;i<5;i++){ arr[i]=prompt("Введите число"); } for(i=0;i<arr.length;i++){ document.write(arr[i]); var max=arr.sort(function(a,b){return(a-b)}); document.write(max+"<br>"); } Михаил,не пойму почему вроде бы сортирует,но выдает это 5 раз,что не так?
Ответить
ой, как много всякого написано и я потратил где-то мин 30-40! см.ниже
Ответить
В строках: var arr = new Array(); for (i = 0; i < 5; i++) arr[i] = prompt("Введите " + (i + 1) + "-ое число"); не указана фигурными скобками {} внутренняя часть цикла, но браузер запрашивает цифры от одного до пяти, а не шесть. Когда же я написал тоже самое сам, он запросил именно шесть. Почему так?
Ответить
Разве массив не в квадратных скобках создается?
Ответить
В круглых.
Ответить
https://learn.javascript.ru/array Синтаксис для создания нового массива – квадратные скобки со списком элементов внутри.
Ответить
Классический способ - круглые. Современный способ квадратные. Тут вообще разницы нет. Странные вопросы. http://javascript.ru/basic/array
Ответить
Вопросы от новичков очень часто странные
Ответить
Не знал, что Вы новичок)
Ответить
Ну, тогда не буду на вас зла держать)))
Ответить
<script type="text/javascript"> var arr=[]; for (var i = 0; i < 5; i++) { var z=prompt('Введите число:'); arr[i]=z; } document.write('Вы ввели массив: '+arr); // другое задание: function Assa() { var massiv=[]; // Такой массив, т.к. делается он быстрее, нежели Array() for (var i = 0; i < 5; i++) { var e = prompt('Введите '+i+' число:'); massiv[i] = e; } function max(massiv) { var maximum = 0; for (var i = 0; i < massiv.length; i++) { if(massiv[i]>maximum) { maximum=massiv[i]; } } document.write('Самое большое число, которое Вы ввели - это ' + maximum); } max(massiv); } Assa(); </script> /* вот где-то так) и это правильно? можно удалить подсказку! */
Ответить
Для добавления комментариев надо войти в систему.
Если Вы ещё не зарегистрированы на сайте, то сначала зарегистрируйтесь.