Javascript многомерные массивы добавление элемента. Полезные приёмы работы с массивами в JavaScript. Методы unshift() и shift()

Что такое массив

Массив – это тип данных, хранящий пронумерованные значения. Каждое пронумерованное значение называется элементом массива, а число, с которым связывается элемент, называется его индексом. Массивы JavaScript нетипизированы, это значит, что элемент массива может иметь любой тип, причем разные элементы одного массива могут иметь разные типы. Помимо этого массивы JavaScript являются динамическими, это значит, что объявлять фиксированный размер не нужно и можно добавить новые элементы в любое время.

Создание массива

Массив можно создать двумя способами, первый : создать массив с помощью литерала массива - квадратные скобки, внутри которых расположен список элементов, разделенных запятыми.

Var empty = ; //пустой массив var numbers = ; //массив с 5 числовыми элементами var diff = ; //массив с 3 элементами различного типа

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

Var num = 700; var tab = , num + 1];

Второй способ создания массива - вызов конструктора Array(). Вызвать конструктор Array() можно тремя способами.

  • Вызов конструктора без аргументов:
var b = new Array();

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

  • В конструкторе явно указываются значения n элементов массива:
var b = new Array(1, 3, 5, 8, "строка", true);

В этом случае конструктор получает список аргументов, которые становятся элементами нового массива. Аргументы записываются в массив в том порядке, в котором указаны.

  • Выделение места для последующего присваивания значений. Это делается путем указания при определении массива одного числа в круглых скобках:
var b = new Array(5);

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

Чтение, запись и добавление элементов массива

Доступ к элементам массива осуществляется с помощью оператора . Элементы массива в JavaScript нумеруются, начиная с нуля. Чтобы получить нужный элемент массива, надо указать его номер в квадратных скобках.

Var numbers = ; document.write(numbers + ", "); //первый элемент массива document.write(numbers + ", "); //второй элемент массива document.write(numbers + ", "); //третий элемент массива document.write(numbers); //четвертый элемент массива

Элементы массива можно изменять:

Var numbers = ; numbers = 10; //изменили первый элемент массива -

Чтобы добавить новый элемент массива, достаточно присвоить новое значение:

Var numbers = ; numbers = 7; //стало

Примечание: в массивах JavaScript может храниться любое число элементов любого типа.

Длина массива

Все массивы, как созданные с помощью конструктора Array(), так и определенные с помощью литерала массива, имеют специальное свойство length, которое возвращает общее число элементов, хранимых в массиве. Поскольку массивы могут иметь неопределенные элементы (имеющие значение undefined), более точная формулировка звучит так: свойство length всегда на единицу больше, чем самый большой индекс (номер) элемента массива. Свойство length автоматически обновляется, оставаясь корректным при добавлении новых элементов в массив.

Var v = new Array(); // v.length == 0 (ни один элемент не определен) v = new Array(1,2,3); // v.length == 3 (определены элементы 0–2) v = ; // v.length == 2 (определены элементы 0 и 1) document.write(v.length);

Чтобы получить последний элемент массива можно воспользоваться так же свойством length:

Var v = ["JavaScript", "Свойство", "Массивы"]; document.write(v);

Последний элемент имеет индекс на 1 меньше чем, длина массива, так как отсчет начинается с нуля. Поэтому, если вы не знаете точное кол-во элементов, но вам надо обратиться к последнему элементу масива используется запись: v.length - 1.

Перебор элементов массива

Наиболее часто свойство length используется для перебора элементов массива в цикле:

В этом примере предполагается, что элементы массива расположены непрерывно и начинаются с первого элемента (с индексом 0). Если это не так, перед обращением к каждому элементу массива нужно проверять, определен ли он:

Var fruits = ["яблоко", "банан", "клубника", "персик"]; for(var i = 0; i

Цикл можно также использовать и для инициализации элементов массива:

Var bar = new Array(10); for(var i = 0; i

Усечение и увеличение массива

При работе с массивами, длина свойства length автоматически обновляется, поэтому нам самим не приходится об этом заботиться. Но стоит упомянуть об одной делати - свойство length доступно не только для чтения, но и для записи. Если свойству length указать значение меньше текущего, то массив укорачивается до новой (заданной) длины, любые элементы, не попадающие в новый диапазон индексов, отбрасываются и их значения теряются, даже если потом вернуть length обратно - значения не будут восстановлены.

Var foo = ; foo.length = 1; //укорачиваем до 1 элемента - foo.length = 4; //восстановим прежнее количество элементов document.write(foo); //прежнего значения нет

Самым простым способом очистить массив будет: foo.length = 0.

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

Удаление элементов массива

Оператор delete записывает в элемент массива значение undefined, при этом сам элемент продолжает существование. Для удаления элементов так, чтобы остающиеся элементы сместились на освободившееся место необходимо воспользоваться одним из предопределенных методов массива. Метод Array.shift() удаляет первый элемент массива, pop() - последний элемент массива, метод splice() - один или диапазон элементов в любом месте массива. Подробно о том как пользоваться этими методами будет описано в следующей главе.

Многомерные массивы

Напомним, что массивы JavaScript могут содержать в качестве элементов другие массивы. Эту особенность можно использовать для создания многомерных массивов. Для доступа к элементам в массиве массивов достаточно использовать кадратные скобки дважды.

Var matrix = [ , , ]; document.write(matrix); //выбран центральный элемент

Разберем, что написано в примере, matrix – это массив массивов чисел. Любой элемент matrix[n] – это массив чисел. Для доступа к определенному числу в массиве надо написать matrix[n][n], во вторых квадратных скобках указывается индекс элемента внутреннего массива.

//аналог предыдущей записи - создание с помощью конструктора var table = new Array(3); for(var i = 0; i

Ассоциативные массивы

Объекты можно использовать в качестве ассоциативных массивов. Немного теории - ассоциативные массивы (называемые также хэш-таблицами) позволяют вместо индексов использовать строки. Применение ассоциативных массивов очень похоже на использование имени свойства обычного объекта, но в данном случае при работе в формате массива. Поскольку в JavaScript нет методов для работы с ассоциативными массивами они применяются значительно реже, чем обычные, хотя точно также могут быть полезны для хранения информации и облегчают запоминание элементов, к которым нужно получить доступ.

Var s_list = new Object(); s_list["fat"] = "Толстый"; s_list["small"] = "Маленький"; s_list["name"] = "Гомер"; for (var x in s_list) //выведем на экран все элементы document.write(s_list[x] + "
");

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

Понятие массива

Массив – это упорядоченный набор данных, который имеет имя и является экземпляром объекта Array. Он состоит из элементов, доступ к которым осуществляется с помощью их порядкового номера (индекса). Нумерация элементов в массиве начинается не с 1, а с 0.

На следующем рисунке приведён числовой массив, состоящий из 7 элементов. Элементы данного массива содержат следующие данные: 1 элемент (0 индекс) - число 123, 2 элемент (1 индекс) - число 214, 3 элемент (2 индекс) - число 315 и т.д.

//элемент в который будем выводить массив //создание числового массива var numberArray = new Array(123,214,315,312,124,206,218); //вывести массив в элемент, имеющий id="myP" document.getElementById("myP").innerHTML = "1 Элемент массива: " + numberArray + "
" + "2 Элемент массива: " + numberArray + "
" + "3 Элемент массива: " + numberArray + "
" + "4 Элемент массива: " + numberArray + "
" + "5 Элемент массива: " + numberArray + "
" + "6 Элемент массива: " + numberArray + "
" + "7 Элемент массива: " + numberArray;

Создание (объявление) массива

Создание массива на языке JavaScript осуществляется с помощью оператора new и функции-конструктора Array . В круглых скобках функции-конструктора Array можно указать одно из следующих значений:

  • Число. В этом случае данная функция создаст массив, состоящий из указанного числа элементов. Все эти элементы будут иметь значения undefined .
  • Несколько значений через запятую. В данном случае функция-конструктор Array создаст массив, состоящий из указанного количества элементов, и присвоит им соответствующие значения.
  • Ничего. В этом случае данная функция создаст пустой массив.

В отличие от многих других языков программирования массивы в JavaScript автоматически меняют свой размер, т.е. они изначально являются динамическими. Таким массивам не надо задавать какие-либо размеры. Ещё одной отличительной чертой массивов JavaScript является то, что в разных элементах одного и того же массива могут содержаться различные типы данных.

Работа с элементами массива

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

Например, создадим пустой массив и добавим в него 4 текстовых элемента:

//создание пустого массива smartphoneColors var smartphoneColors = new Array(); //присваиваем 1 элементу массива (индекс 0) значение "Black" smartphoneColors = "Black"; //присваиваем 2 элементу массива (индекс 1) значение "White" smartphoneColors = "White"; //присваиваем 3 элементу массива (индекс 2) значение "Grey" smartphoneColors = "Grey"; //присваиваем 4 элементу массива (индекс 3) значение "Blue" smartphoneColors = "Blue";

Например, выведем в консоль браузера (F12) значения 2 и 4 элемента массива smartphoneColors:

Console.log("2 элемент = " + smartphoneColors); console.log("4 элемент = " + smartphoneColors);

Длина массива (количество элементов в массиве)

Определение количества элементов в массиве осуществляется с помощью свойства length .

//создадим массив путём перечисления значений элементов в функции Array var volumeHDDs = new Array("500Gb","1Tb","2Tb"); //переменной lengthArray присвоим длину массива volumeHDDs var lengthArray = volumeHDDs.length;

Как получить первый элемент массива

Получение значения первого элемента массива осуществляется с помощью указания в квадратных скобках этого массива числа 0:

//создание массива, состоящего из 3 элементов var volumeHDDs = new Array("500Gb","1Tb","2Tb"); //получение значения первого элемента массива var firstValue = volumeHDDs;

Как получить последний элемент массива

Получение значения последнего элемента массива осуществляется с помощью указания в квадратных скобках этого массива выражения имя_массива.length-1:

//создание массива, состоящего из 3 элементов var volumeHDDs = new Array("500Gb","1Tb","2Tb"); //получение значения последнего элемента массива var lastValue = volumeHDDs;

Перебор массива

Перебор элементов массива осуществляется с помощью цикла for .

Например, переберём все элементы массива и выведем их значения в консоль браузера (F12):

//создание массива nameStudents, состоящего из 4 элементов var nameStudents = new Array("Петя","Вася","Коля","Максим"); //перебор элементов массива от 0 до длины массива-1 for (var i=0; i = 10); //если значение элемента больше или равно 10 - выражение вернет true } var filtered = .filter(isBig); //filtered

map

Метод map() создает и возвращает новый массив, который будет состоять из результатов вызова функции callback(item, idx, ar) для каждого элемента массива.

Var a = ; var b = a.map(function(item, idx, arr) { return item * item; }); // b =

every и some

Метод every() возвращает true, если для всех элементов массива указанная функция, используемая для их проверки, вернет true.

Метод some() возвращает true, если во время проверки в указанной функции один или несколько элементов вернут true.

Var a = ; a.every(function(x) { return x 10; }) //true: одно число > 10

reduce и reduceRight

Синтаксис методов:

Имя_массива.reduce(callback, initialValue) имя_массива.reduceRight(callback, initialValue)

Метод reduce() применяет указанную функцию (callback) в отношении сразу двух значений в массиве, перебирая элементы слева направо, сохраняя при этом промежуточный результат.

Аргументы функции callback: (previousValue, currentItem, index, array)

  • previousValue - возвращаемый результат callback функции (он же промежуточный результат)
  • currentItem - текущий элемент массива (элементы перебираются по очереди слева-направо)
  • index - индекс текущего элемента
  • array - обрабатываемый массив

initialValue (инициализирующее значение) - объект, используемый в качестве первого аргумента первого вызова функции callback. Проще говоря, значение previousValue при первом вызове равно initialValue. Если initialValue нет, то оно равно первому элементу массива, а перебор начинается со второго:

Var a = ; function foo(prevNum,curNum) { sum = prevNum + curNum; alert(sum); return sum; } var result = a.reduce(foo, 0); document.write(result); Попробовать »

Разберем как работает этот пример. Первыми аргументами функции foo являются:

  • prevNum = 0 (так как initialValue - 0)
  • curNum = 1 (текущий элемент - 1-ый элемент массива)

К числу 0 прибавляется 1. Этот результат (sum: 1) будет передан как prevNum при следующем запуске функции. И так далее пока не дойдет до последнего элемента. Возвращенный результат - сумма от последнего запуска, составит 15 (1+2+3+4+5).

Метод reduceRight работает аналогично методу reduce, но идет по массиву справа-налево:

Var a = ["h","o","m","e"]; function bar(prevStr, curItem) { return prevStr + curItem; } document.write(a.reduceRight(bar)); //emoh



Есть вопросы?

Сообщить об опечатке

Текст, который будет отправлен нашим редакторам: