hellojs.ru
Главная - Основы JavaScript - Массивы и псевдомассивы

Массивы и псевдомассивы

Размещено в категории "Основы JavaScript"
27.09.2024 / просмотров: 51 / комментариев: 0
Ресурсы:

Алгоритм быстрой сортировки
Ссылка на шпаргалку по объектам
Отличия for...of от for...in




Создадим для начала какой-нибудь массив:
Код

const arr = [1, 2, 3, 6, 8];

Методы для работы с концом массива

Код

arr.pop(); // удаляет последний элемент массива и возвращает его значение.  

console.log(arr); // [ 1, 2, 3, 6 ]

Теперь добавим какой-то элемент в конец массива:
Код

arr.push(10); // добавляет элемент в конец массива и возвращает новую длину массива.

console.log(arr); // [ 1, 2, 3, 6, 8, 10 ]

Методы для работы с началом массива

У этих методов есть недостаток: удаляя из начала массива элемент или добавляя в начало массива новый, мы тем самым изменяем индексы всех остальных элементов.

Метод unshift() добавляет один или более элементов в начало массива и возвращает новую длину массива.
Код

const arr = [1, 2, 3, 6, 8];

arr.unshift(13);

console.log(arr); // [ 13, 1, 2, 3, 6, 8 ]

Метод shift() удаляет первый элемент из массива и возвращает его значение. Этот метод изменяет длину массива.
Код

const arr = [1, 2, 3, 6, 8];

arr.shift();

console.log(arr); // [ 2, 3, 6, 8 ]

Как перебрать массив

Код

const arr = [1, 2, 3, 6, 8];

for (let i = 0; i < arr.length; i++) {
  console.log(arr[i]);
}

Можно перебрать с помощью for...of
Код

for (let value of arr) {
  console.log(value);
}  

Цитата

for...of работает только с массивоподобными сущностями (массив, псевдомассив, строка, сущности Map и Set) и не применим к объектам.

Свойство length это индекс последнего элемента плюс единица.
Код

const arr = [1, 2, 3, 6, 8];

arr[99] = 0; // добавим в массив еще элемент с индексом 99 и значением 0

console.log(arr.length); // 100 а не 6 как ожидалось

А что будет если сейчас вывести этот массив в консоль? Мы увидим 94 пустых ячейки массива:
Цитата

[ 1, 2, 3, 6, 8, <94 empty items>, 0 ]

Метод forEach является самым используемым для массивов в коде, его отличие в том, что он принимает в себя callback-функцию, что позволяет гибко перебирать элементы массива, поскольку передаваемая функция будет выполняться каждый раз для каждого элемента массива
Код

const arr = [1, 2, 3, 6, 8];

arr.forEach(function () {

});

Данная функция может в себя принимать три аргумента:

- перебираемый в данный момент элемент
- индекс этого элемента
- ссылка на перебираемый массив
Код

const arr = [1, 2, 3, 6, 8];

arr.forEach(function(item, i, arr) {

});  

Пример использования аргументов
Код

const arr = [1, 2, 3, 6, 8];

arr.forEach(function (item, i, arr) {
  console.log(`${i}: ${item} внутри массива ${arr}`);
});

Цитата

0: 1 внутри массива 1,2,3,6,8
1: 2 внутри массива 1,2,3,6,8
2: 3 внутри массива 1,2,3,6,8
3: 6 внутри массива 1,2,3,6,8
4: 8 внутри массива 1,2,3,6,8

Использование for...of по сравнению с forEach() имеет один плюс: в нём можно использовать ключевые слова brake и continue

Метод split() разбивает (делит) строку на две или более подстроки в зависимости от разделителя.
Разделитель может быть одним символом, другой строкой или регулярным выражением. После разделения строки на несколько подстрок метод split() помещает их в массив и возвращает его.
Код

const str = "222, 352, 14, 555, Alex"; // допустим строка данных пришла с сервера

console.log(str.split(", "));

Цитата

[ '222', '352', '14', '555', 'Alex' ]

Можно наоборот из массива сформировать строку
Код

let arr = [ '222', '352', '14', '555', 'Alex' ];

console.log(arr.join("; "));

Цитата

222; 352; 14; 555; Alex

Метод join() объединяет все элементы массива (или массивоподобного объекта) в строку.

Метод sort() на месте сортирует элементы массива и возвращает отсортированный массив. Порядок сортировки по умолчанию соответствует порядку кодовых точек Unicode.

Примеры:
Код

let fruit = ['арбузы', 'бананы', 'Вишня'];
fruit.sort(); // ['Вишня', 'арбузы', 'бананы']

let scores = [1, 2, 10, 21];
scores.sort(); // [1, 10, 2, 21]

let things = ['слово', 'Слово', '1 Слово', '2 Слова'];
things.sort(); // ['1 Слово', '2 Слова', 'Слово', 'слово']
// В Unicode, числа находятся перед буквами в верхнем регистре,
// а те, в свою очередь, перед буквами в нижнем регистре.  

По умолчанию этот метод сортирует числа как строки, но этого можно избежать, потому как метод может принимать как аргумент callback-функцию,с её помощью мы можем дать указание методу как именно сортировать этот массив:
Код

const arr = [22, 12, 8, 15, 3];

function compareNum(a, b) {
  return a - b;
}

arr.sort(compareNum); // [ 3, 8, 12, 15, 22 ]  


Псевдомассивы



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

Как отличить псевдомассив от массива?

Существует специальный метод Array.isArray, который возвращает true, если параметром ему передан массив, и false в остальных случаях:
Код

let test1 = [1, 2, 3];
console.log(Array.isArray(test1)); // выведет true

let test2 = {a: 1, b: 2, c: 3};
console.log(Array.isArray(test2)); // выведет false

let test3 = 'abcde';
console.log(Array.isArray(test3)); // выведет false

Для псевдомассивов этот метод также вернет false:
Код

let elems = document.querySelectorAll('p');
console.log(Array.isArray(elems)); // выведет false
Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
Сайт управляется системой uCoz