Коллекции данных
До сих пор большинство из вас хорошо знакомы с простыми типами, такими как число, строка, логическое значение, которые используются для обработки одиночных значений. Но в приложениях реального типа нам приходится иметь дело с более сложной организацией данных. Для организации множества элементов данных используются массивы.
Массивы представляют собой упорядоченные наборы значений…
1. Список товаров в корзине покупок
2. Песни в плейлисте
Чтобы понять массивы, см. контейнер для таблеток ниже, который содержит таблетки для каждого дня недели, начиная с первого дня недели (вс) до последнего дня недели (сб).
Создание массива
// To make an empty array let employees = []; // Array of strings let cars = ['BMW','VW','OODI']; // Array of numbers let numbers = [95,88,30,99,65]; // Mixed array let employeeInfo = ['Alex',10000,'HR'];
Массивы индексируются
Каждый элемент массива имеет связанный с ним позиционный индекс, начинающийся с 0. Это означает, что первый элемент имеет индекс 0, второй элемент имеет индекс 1 и т. д., что указывает на то, что массивы представляют собой упорядоченную коллекцию.
let colors = ['Red', 'Green', 'Blue', 'Yellow', 'Pink', 'Black']; console.log(colors.length) // 6 console.log(colors[0]) // Red console.log(colors[1]) // Green console.log(colors[5]) // Black console.log(colors[6]) // undefined console.log(colors[100]) // undefined
Доступ к последнему элементу
let colors = ['Red', 'Green', 'Blue', 'Yellow', 'Pink', 'Black']; Step-1: Get the array length colors.length // 6 - Returns the array size Step-2: Convert length to the last index as index start with 0. colors.length - 1 // 5, Last index of array Step-3: Get the last element from the array colors[ colors.length - 1] // Black
Изменение массивов
let colors = ['Red', 'Blue', 'Green'] colors[2] = 'Lime' console.log(colors) // ['Red', 'Blue', 'Lime'] console.log(colors[3]) // undefined colors[3] = 'Black' // ['Red', 'Blue', 'Lime', 'Black']
Добавление элемента в конец массива
let shoppingCart = []; shoppingCart[0] = 'Mobile' shoppingCart[1] = 'Earpods' console.log(shoppingCart) // [Mobile, Earpods] // Adding element to the end of the array shoppingCart[shoppingCart.length] = 'Mobile Case' shoppingCart[shoppingCart.length] = 'Jeans'
Введение в ссылочные типы
Мы все хорошо знакомы с примитивными типами. Всякий раз, когда мы создаем примитивную переменную, создается пространство в памяти для хранения двоичных эквивалентных значений в памяти. См. рисунок ниже…
Любое изменение переменной будет обновлено значением в ранее зарезервированной области памяти, что означает, что значение будет обновлено в памяти.
// Creates new variable in memory with label fruit let fruit = 'Orange' // Create another variable color with same value of fruit let color = fruit console.log(fruit + " - " + color) // Orange Orange // Update value of color variable color = 'Red' // Notice only color variable's value is changed console.log(fruit + " - " + color) // Orange Red
Поскольку переменные primitive
напрямую хранят значение в памяти, они называются Value Type Variable
.
Значения primitive
всегда хранятся в Stack
в памяти в порядке LIFO
(последний вошел, первый вышел).
Но если рассматривать array
и object
как типы, то они отличаются от типов primitive
тем, что не хранят значения непосредственно в памяти.
При создании массива память массива не содержит значений массива. Значения массива хранятся где-то еще в памяти, а переменная массива содержит ссылку (адрес) значений массива, как показано на следующем рисунке.
let nums = [1,2,3,4,5] /* Creates an array and save the reference(address) of array into a variable called nums.*/
Когда массив копируется в другую переменную, копируются только ссылки на массив, а не все значения массива.
let otherNums = nums // copy array into another array
Поскольку копируются только ссылки массива, любые изменения значений массива через любую ссылочную переменную видны обеим переменным массива.
Посмотрите на пример ниже, если мы изменим otherNums
array, это также повлияет на массив nums
, так как оба ссылаются на один и тот же массив значений.
otherNums[3] = 11 // update the 4th value of array console.log(nums) // [1,2,3,11,5] console.log(otherNums) // [1,2,3,11,5]
Таким образом, массив и объект называются Reference Types
.
Посмотрите на полный пример ниже…
let nums = [1,2,3,4,5] let otherNums = nums // Copy reference of array console.log(nums) // [1,2,3,4,5] console.log(otherNums) // [1,2,3,4,5] otherNums[3] = 11 // Update values console.log(nums) // [1,2,3,11,5] console.log(otherNums) // [1,2,3,11,5]
Reference types
работают только при создании клонов массивов или объектов. Массивы с одинаковыми значениями не создают ссылочных копий. Посмотрите на пример ниже…
let arr1 = [1,2,3,4,5] let arr2 = [1,2,3,4,5] console.log(arr1) // [1,2,3,4,5] console.log(arr2) // [1,2,3,4,5] arr1[2] = 0 console.log(arr1) // [1,2,0,4,5] console.log(arr2) // [1,2,3,4,5]
Как показано в приведенном выше примере, изменения в arr1
не влияют на arr2
, поскольку оба они хранятся в разных местах памяти.
Использование Const с массивом
Как мы узнали, массив не хранит значения, он хранит только ссылки на массив.
let fruits = ['Apple','Grapes','Banana'] console.log(fruits) // [Apple, Grapes, Banana]
В приведенном выше примере создается переменная fruits
, которая содержит ссылку на значения массива ['Apple','Grapes','Banana']
.
Теперь во время операций с массивами мы обычно меняем значения массива, как показано ниже…
fruits.push('papaya') // Adding new item in fruits console.log(fruits) // [Apple,Grapes,Banana,papaya]
Но поскольку мы определили массив fruits
с ключевым словом let
, можно изменить ссылку, а переменной fruits
можно назначить другую ссылку на массив, как показано в примере ниже…
fruits = ['BMW','VW','Maruti','Toyoto'] console.log(fruits) // [BMW,VW,Maruti,Toyoto]
Таким образом, в приведенном выше примере fruits
назначаются новые значения массива, которые содержат автомобили, что концептуально неверно.
Мы можем предотвратить такое поведение, создав переменную с ключевым словом const
, поскольку const не позволяет изменять переменную после ее создания.
const fruits = ['Apple','Banana','Grapes'] console.log(fruits) // [Apple, Banana, Grapes] fruits.push('Orange') console.log(fruits) // [Apple, Banana, Grapes, Orange] fruits = ['BMW','VW','Maruti'] /* Error, as array is const and reference can't be changed. */
Если вам понравился пост, не забудьте подписаться на меня:
Канал: https://medium.com/@maheshshittlani
Github: https://github.com/maheshshittlani
LinkedIn: https://in.linkedin.com/in/mahesh-shittlani-638b7429