Структура данных массива организует элементы последовательно, один за другим в оперативной памяти, поэтому, если вы хотите перебирать данные, структура данных массива — лучший выбор, особенно если вы знаете их индексы.

Массивы уже встроены почти во все языки программирования, например, в JavaScript массив строк инициализируется следующим образом;

const myArray = ['a','b','c']; 

Чтобы получить доступ к элементу массива с индексом 1 myArray[1], эта операция будет иметь постоянную временную сложность O(1), поскольку компьютер точно знает, где в памяти расположены данные. Удаление или добавление элемента в конец массива также будет иметь постоянную временную сложность.

Удаление или добавление элемента в начало массива, вставка элемента в массив или удаление элемента из массива будут иметь линейную временную сложность O(n), поскольку остальные элементы массива должны изменить свои индексы.

Таким образом, массивы хороши для доступа к элементам и добавления элементов в конце.

Есть 2 типа массивов;

Статические массивы:

Они имеют фиксированный размер, это означает, что вам нужно указать количество элементов, которые будет содержать массив. Чтобы добавить больше элементов в тот же массив, вам нужно скопировать весь массив в другой адрес памяти. Статические массивы используются в C, C++ и других низкоуровневых языках.

Динамические массивы:

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

В JavaScript массивы — это объекты, что делает их ссылочными типами, потому что они не являются примитивными типами, они создаются программистом, и есть 3 вещи, которые важны, когда речь идет об объектах.

1. Тип ссылки

Всякий раз, когда вы создаете новый объект/массив, вы создаете новую ссылку, поэтому при попытке запустить [] === []или {} === {} или {a:1} === {a:1} в консоли вы получите false, потому что это две разные ссылки.

Если только один не указывает на ссылку другого, т.е.

Let arr1 = [1,2];
Let arr2 = arr1;
Arr1 === arr2 //true because they have the same reference

2. Контекст

Это отличается от области, когда вы создаете функцию, вы создаете новую область, но контекст означает, в какой объектной среде мы находимся.

Это делается с помощью ключевого слова this в JavaScript, т. е. если вы запустите console.log this в консоли браузера, вы получите объект окна, потому что это объект, в котором работает браузер.

3. Создание экземпляра

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

Class Mammal{
Constructor(name,age){
this.name = name;
this.age = age;
}
Introduce(){
Console.log(“hello ${this.name}”);
}
}//you notice that we use the this keyword to reference to properties in the context of the object created from the class

Если вы хотите создавать объекты, но с большей функциональностью, вы можете расширить классы

Class Dog extends Mammal{
Constructor(name, age){
Super(name, age);//runs the constructor of the parent
}
Bark(){
Console.log(“boo”);
}}

Теперь мы можем создавать новые объекты

Const mammal = new Mammal(99“doe”,12);//mammal is an object Mammal{}