Что такое массивы (списки)
Для хранения разных величин мы использовали переменные, например:let number = 4;
let name = "Vasya";
let isAlive = true;
Для удобства и понимания мы представляли переменную в виде коробочки, у которой есть имя, в которой хранится какое-то значение:
Но часто бывают ситуации, когда нам необходимо хранить множество объектов и величин одного типа – наборы данных: например, список с противниками, список предметов в инвентаре, список всех лечилок или монеток, список фраз у NPC и т.п.
Для этого используются одномерные и многомерные массивы.
Одномерные массивы
Рассмотрим пример одномерного массива: это массив, который называется enemies, содержащий список имён противников:let enemies = ["John", "Jack", "Jane", "Rokko", "James", "Bill"];
Цифры от 0 до 5 называются индексами – это порядковый номер элемента в массиве. Для того, чтобы обратиться к какому-то элементу, указывается имя массива и его индекс в нём. Например:
console.log(enemies[0]); // Выведется John
Многомерные массивы
Рассмотрим пример, когда у нас в фэнтези-игре есть 3 уровня и на каждом из них может выпадать тот или иной предмет из лута (инвентаря). Для этого используем многомерный массив loot с названиями этих предметов:У этого массива есть 3 ряда по 4 элемента в каждом ряду.
Первый индекс означает номер ряда, второй – номер элемента в этом ряду. Объявляется такой массив таким образом:
let loot = [
["Простой меч","Старый лук","Свиток молнии", "Мясо свинки"],
["Святой щит","Колчан","Посох дедугана", "Суп из дракона"],
["Шльом","Мегабронь","Борода Гэндальфа", "Слёзы единорога"]
];
console.log(loot[1][1]); // Выдаст "Колчан"
Объекты
Вместо числовых индексов в массивах можно использовать текстовые значения – ключи. Такие массивы называются ассоциативными или объектами. Рассмотрим объекты на примере противника:Объекты задаются так:
let enemy1 = {
"x": 147,
"y": 445,
"speedX": 5,
"speedY": -4,
"hp": 100,
"damage": 10,
"id": 1
}
console.log(enemy1["x"]); // Выведется 147
console.log(enemy1.x); // Тоже выведется 147
Я предпочитаю использовать запись через точку enemy1.x
Try it out
1. Математические операции с элементами массива.
Рассмотрим пример: за неделю было заработано определённое количество опыта. Эти данные записаны в виде массива. Нужно посчитать сумму полученного за неделю опыта.1.1. Введём в программу данные:
let expa = [1035,467,0,2988,3586,4289,11087];
1.2. Сумму опыта будем хранить в переменной sumExpa:
let sumExpa = 0;
1.3. Для того, чтобы подсчитать сумму всех элементов мы будем использовать циклы, с каждой итерацией добавляя в сумму значение из массива:
Количество повторений столько, сколько элементов в массиве, их можно узнать при помощи команды expa.length
for (let i=0;i<expa.length;i++) {
sumExpa = sumExpa + expa[i]; // к старому значению sumExpa прибавляем значения из массива
}
1.4. В конце, после цикла выведем эту сумму:
alert("За неделю вы заработали " + sumExpa + " опыта");
Таким же образом можно совершать и другие математические операции над элементами массива.
2. Поиск в массиве по определённому критерию.
Найдём в массиве максимальное количество опыта и номер дня, в который он был заработан.2.1. Продолжим предыдущую программу, добавим две новые переменные:
let sumExpa = 0;
let maxExpa = 0;
let dayMaxExpa = 0;
2.2. После вывода суммы из предыдущего примера добавим ещё один цикл. Пробежимся по массиву циклом, который будет работать так:
Если в этот день было больше опыта, чем в максимальном, тогда назначим новое максимальное значение и индекс этого дня запишем, как дня с максимальным опытом:
alert("За неделю вы заработали " + sumExpa + " опыта");
for (let i=0;i<expa.length;i++) {
if (expa[i]>maxExpa) {
maxExpa = expa[i];
dayMaxExpa = i
}
}
2.3. В конце, после этого цикла выведем информацию:
alert("Наибольшее количество опыта " + maxExpa + " вы заработали на " + dayMaxExpa + " день");
В конспект
Индексы элементов массива в js начинаются с 0.Объявление одномерного массива:
let enemies = ["John", "Jack", "Jane", "Rokko", "James", "Bill"];Объявление двухмерного массива:
let loot = [["Простой меч","Старый лук","Свиток молнии", "Мясо свинки"],
["Святой щит","Колчан","Посох дедугана", "Суп из дракона"],
];
Объявление объекта
let enemy1 = {"x": 147,
"y": 445,
"speedX": 5,
"speedY": -4,
"hp": 100,
"damage": 10,
"id": 1
}
Узнать количество элементов в массиве
array.lengthЗадачи
Задача 9.1*. Измените код из 2 пункта TryItOut: теперь нужно найти минимальное количество опыта и номер этого дня.Задача 9.2*. Дополните предыдущую задачу, чтобы программа выводила не номер дня, а его название (например, понедельник, вторник и т.д.)
Задача 9.3*. Посчитать количество отрицательных элементов в массиве и вывести это число на экран. Пример массива:
[34,23,-569,-23,453,-3,0,34,-445,2,-3]
Задача 9.4*. Вывести все чётные числа массива на экран
[34,23,-569,-23,453,-3,0,34,-445,2,-3]
Задача 9.5***. Дан многомерный массив лута. Напишите программу, которыя выводит название лута: с вероятностью 50% выпадает лут первого уровня, 35% – второго уровня и 15% – третьего уровня.
let loot = [
["Простой меч","Старый лук","Свиток молнии", "Мясо свинки"],
["Святой щит","Колчан","Посох дедугана", "Суп из дракона"],
["Шльом","Мегабронь","Борода Гэндальфа", "Слёзы единорога"]
];
Задача 9.6**. Генератор историй. Программа случайно выбирает по слову из массива и собирает из них историю по шаблону: "кто" и "кто" "когда" "что делали" и это закончилось тем, что "результат". Например: "Карлсон и Годзилла в расцвет Римской империи сдавали металлолом и это закончилось тем, что Стив Джобс презентовал iPhone".
Пример массива (можете собрать слова от однокурсников):
let who = ["Карлсон","Дед Мороз","Терминатор"]
let when = ["в расцвет Римской империи","вчера","когда появился мир"]
// и так далее
Дополнительные задачи
Доп. задача 9.1*. Дан массив, состоящий из 15 элементов целого типа. Определить количество отрицательных, количество положительных и количество нулевых элементов.Доп. задача 9.2*. Дан массив из 10 целых чисел. Посчитать сумму всех чисел массива.
Доп. задача 9.3*. Дан массив из 10 целых чисел. Найти индекс наибольшего из нечётных элементов массива.
Доп. задача 9.4*. Определить сумму и количество элементов, расположенных до первого отрицательного числа.
Доп. задача 9.5**. Определить максимальные элементы в двух массивах и поменять их местами.
Комментарии
Отправить комментарий