Использование массивов в JS
Определение массива.
Массив - это упорядоченная коллекция значений. Значения в массиве называются элементами, и каждый элемент характеризуется числовой позицией в массиве, которая называется индексом.
Чтобы создать пустой массив:
var fruits = [];
В скобках мы можем указать начальные значения элементов:
var fruits = ["Яблоко", "Апельсин", "Слива"];
Элементы массива нумеруются, начиная с нуля.
Мы можем получить элемент, указав его номер в квадратных скобках:
var fruits = ["Яблоко", "Апельсин", "Слива"]; fruits[0]; // Яблоко fruits[1]; // Апельсин fruits[2]; // Слива
Мы можем заменить элемент:
fruits[2] = 'Груша'; // теперь ["Яблоко", "Апельсин", "Груша"]
…Или добавить новый к существующему массиву:
fruits[3] = 'Лимон'; // теперь ["Яблоко", "Апельсин", "Груша", "Лимон"]
Общее число элементов массива содержится в его свойстве length:
var fruits = ["Яблоко", "Апельсин", "Слива"]; fruits.length; // 3
В массиве могут храниться элементы любого типа. В примере ниже элемент с индексом 0 это строка, с индексом 1 это число, а с индексом 2 - boolean значение.
var fruits = ["Яблоко", 5, true];
Методы pop/push, shift/unshift.
pop
Удаляет последний элемент из массива:
var fruits = ["Яблоко", "Апельсин", "Слива"]; fruits.pop(); // Теперь ["Яблоко", "Апельсин"];
push
Добавляет элемент в конец массива:
var fruits = ["Яблоко", "Апельсин"]; fruits.push("Слива"); // Теперь ["Яблоко", "Апельсин", "Слива"];
shift
Удаляет из массива первый элемент:
var fruits = ["Яблоко", "Апельсин"]; fruits.shift(); // Теперь ["Апельсин"];
unshift
Добавляет элемент в начало массива:
var fruits = ["Яблоко", "Апельсин"]; fruits.unshift("Слива"); // Теперь ["Слива", "Яблоко", "Апельсин"];
Многомерные массивы
Массивы могут содержать элементы, которые тоже являются массивами. Это можно использовать для создания многомерных массивов, например, для хранения матриц:
var matrix = [ [1, 2, 3], [4, 5, 6], [7, 8, 9] ]; matrix[1][1]; // 5, центральный элемент
Перебор элементов
Одним из самых старых способов перебора элементов массива является цикл for по цифровым индексам:
var fruits = ["Яблоко", "Апельсин", "Груша"]; for (var i = 0; i < fruits.length; i++) { arr[i]; }
Применяем массивы в Canvas.
На прошлом занятии мы вывели ряд из елей разной высоты. Давайте сделаем каждый из рядом разного цвета. Цвета будут храниться в массиве. Создадим переменную colors, которая будет содержать 3 цвета для уровней елей и один для основы:
var colors = ['#1CAC78', '#44944A', '#1E5945', 'brown'];
В функции добавим 4 параметр - цвет. Теперь его мы будем подставлять.
function drawTriangle(y1, y2, y3, color){ context.fillStyle = color; context.beginPath(); context.moveTo(30 + i, y1); context.lineTo(10 + i, y2); context.lineTo(50 + i, y3); context.closePath(); context.fill(); }
Тогда для первого цикла код будет выглядеть следующим образом:
for (var i = 0; i < obj.width - 50; i+=40) { if(counter % 2 === 0){ drawTriangle(20, 40, 40, colors[0]); // Обращаемся к первому элементу в массиве и передаем его в функцию } counter = counter + 1; }
Для второго, третьего и четвертого циклов:
do { drawTriangle(40, 60, 60, colors[1]); // Обращаемся ко второму элементу в массиве и передаем его в функцию i=i+40; // шаг приращения } while(i < obj.width - 50) while(i < obj.width - 50) { drawTriangle(60, 80, 80, colors[2]); // Обращаемся к третьему элементу в массиве и передаем его в функцию i=i+40; // шаг приращения } while(i < obj.width - 50) { context.fillStyle = colors[3]; context.fillRect(25 + i, 80, 10, 15); i=i+40; // шаг приращения }
Весь итоговый код представлен ниже.