Работа с массивами в JavaScript | В паутине

Работа с массивами в JavaScript

Массивы - чрезвычайно полезны для структурированного хранения и передачи большого количества данных. Однако для удобной работы с такой громоздкой конструкцией требуются специальные методы. Рассмотрим некоторые из них.

Создание массива

const a = []
const a = [1, 2, 3]
const a = Array.of(1, 2, 3)
const a = Array(6).fill(1) // массив из шести единиц

Размер массива

arr.length

Есть ли в массиве такой элемент?

array.includes(element)

Ищет в массиве array элемент element и возвращает true или false. Поиск регистрозависимый, ищет точное соответствие, а не вхождение подстроки.

Можно указать начальную точку для поиска (передается вторым аргументом).

array.includes(element, 2)

Также может быть применен к строкам.

Где этот элемент?

array.indexOf(element)

Возвращает позицию (индекс) элемента в массиве.
Если в данном массиве такого элемента нет, вернет -1.
Если в массиве несколько элементов с таким значением, вернет индекс первого найденного.
Можно указать начальную точку для поиска, как в предыдущем методе.

array.lastIndexOf(element)

Этот метод делает то же самое, но поиск начинает с конца массива. Таким образом, если в массиве несколько одинаковых элементов, будет возвращен последний из них.

Добавить и удалить

array.pop()

Удаляет последний элемент и возвращает его

array.push(element)

Добавляет новый элемент в конец, возвращает измененный массив -
аналогичный метод: array[array.length] = element

array.shift()

Удаляет первый элемент и возвращает его

array.unshift(element)

Добавляет новый элемент в начало массива, возвращает измененный массив

arr.length = 0;

Удаляет все элементы массива

delete arr[index]

оставляет "дырку" - пустой элемент

arr.splice(index[, deleteCount, elem1, ..., elemN])

Удалить deleteCount элементов, начиная с номера index, а затем вставить elem1, ..., elemN на их место. Возвращает массив из удалённых элементов.

arr.concat(value1, value2, … valueN)
arr.concat(arr2)

создает новый массив, равный arr и добавляет указанные в скобках элементы

Перебор

В массивах перебор элементов осуществляется обычным циклом или циклом for-of:

for (var i=0; i<arr.length; i++){...}

for (let v of arr) { ... }

Вызвать функцию для каждого элемента массива:

arr.forEach(callback(item, i, arr)[, this])

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

arr.every(callback(item, i, arr)[, this])

возвращает true, если вызов callback вернёт true для каждого элемента arr

arr.some(callback(item, i, arr)[, this])

возвращает true, если вызов callback вернёт true хотя бы для одного элемента arr

Из массива в строку и обратно

let string = 'some interesting text';
let arr = string.split(' ');

первый аргумент - разделитель (если пустая строка, разобьет по буквам)
второй аргумент - ограничение на количество элементов в массиве

let arr = ['some', 'interesting', 'text'];
let string = arr.join(' ');

new Array(4).join("ля") // повторит разделитель ля 4 раза, массив будет пустым

Копирование

arr.slice(begin, end)

копирует участок массива от begin до end (не включая). Исходный массив при этом не меняется.

  • если не указан end - копирует до конца массива
  • если start отрицательный - считает с конца
  • без аргументов - скопирует весь массив

метод slice() одинаков для массивов и строк

arr1 = [...arr2]
const b = Array.of(...a)

Деструктуризация - копирование без создания ссылки.

const b = Array.from(a)
const b = Array.from(a, x => x % 2 == 0)

Создание копии другого массива.

const a = [1, 2, 3, 4]
a.copyWithin(0, 2) // [3, 4, 3, 4]
const b = [1, 2, 3, 4, 5]
b.copyWithin(0, 2) // [3, 4, 5, 4, 5]
const c = [1, 2, 3, 4, 5]
c.copyWithin(0, 2, 4) // [3, 4, 3, 4, 5]

Копирование части массива.

Объединение массивов

let arr1 = [...arr2, ...arr3]

Объединит элементы массивов arr2 и arr3 в массиве arr1.

Сортировка, фильтрация, изменение

arr.sort(function)

Функция сравнивает между собой элементы массива и возвращает значение, на основании которого массив сортируется:

  • Положительное, если a > b,
  • Отрицательное, если a < b,
  • Если a = b, можно вернуть 0, но в целом это не важно.
arr.reverse()

переворачивает массив

arr.filter(callback(item, i, arr)[, this]);

// пример фильтрующей функции
function(number, index, arr) {
  return number > 0;  //возвращает только элементы с положительным значением
}

фильтрует массив.

arr.map(callback(item, i, arr)[, this])

// пример трансформирующей функции
function(item, index, arr) {
  return item.length; // вместо строк выводит их длины
}

трансформация элементов

arr.reduce(callback(previousValue, currentItem, index, arr)[, this])
arr.reduceRight(callback(previousValue, currentItem, index, arr)[, this])

последовательная обработка каждого элемента функцией callback с сохранением промежуточного результата

arr.find((element, index, array) => { // return true or false })
arr.findIndex((element, index, array) => { // return true or false })

Возвращает первый соответствующий элемент (или его индекс) или undefined.

Массивы и объекты

Есть коллекция строк, необходимо проверить, есть ли в ней указанный элемент.
Свойство массива indexOf работает медленно, поэтому оно не подходит. Чтобы сделать это быстро, нужно превратить все элементы в ключи объекта, доступ к которым осуществляется гораздо быстрее.

var obj = {};
var arr = ["elem1", "elem2", "elem3"];
for (var i = 0; i < arr.length; i++) {
  var key = arr[i]; // для каждого элемента создаём свойство
  obj[key] = true; // значение здесь не важно
}

Обратная задача - все свойства объекта собрать в массив:

var obj = {
  prop1: value1,
  prop2: value2,
  prop3: value3,
  prop4: value4
}
var keys = Object.keys(obj); //keys - массив, содержащий свойства объекта obj

Комментарии (0)

Ваш email не будет опубликован. Все поля обязательны