В этой статье мы обсудим большинство новых методов, доступных в ES6, которые работают с типом Array
, используя Array.*
И Array.prototype.*
.
Обсуждая их, я напишу Array.method()
когда опишу метод «class», и Array.prototype.method()
когда Array.prototype.method()
метод «instance».
Мы также увидим некоторые примеры использования и упомянем несколько полифилов для них. Если вам нужна библиотека polyfill-them-all, вы можете использовать es6-shim Пола Миллера .
Array.from ()
Первый метод, который я хочу упомянуть, это Array.from()
. Он создает новый экземпляр Array
из массива или итеративного объекта. Этот метод может быть использован для решения старой проблемы с массивными объектами, которую большинство разработчиков решают с помощью этого кода:
// typically arrayLike is arguments var arr = [].slice.call(arrayLike);
Синтаксис Array.from()
показан ниже:
Array.from(arrayLike[, mapFn[, thisArg]])
Значение его параметров:
-
arrayLike
:arrayLike
или повторяемый объект -
mapFn
: функция для вызова каждого содержащегося элемента -
thisArg
: значение для использования в качестве контекста (this
) функцииmapFn
.
Теперь, когда мы знаем его синтаксис и его параметры, давайте посмотрим на этот метод в действии. В приведенном ниже коде мы собираемся создать функцию, которая принимает переменное число аргументов и возвращает массив, содержащий эти элементы, удвоенные:
function double(arr) { return Array.from(arguments, function(elem) { return elem * 2; }); } const result = double(1, 2, 3, 4); // prints [2, 4, 6, 8] console.log(result);
Демонстрационная версия предыдущего кода показана ниже и также доступна на JSBin .
Этот метод поддерживается в Node и во всех современных браузерах, за исключением Internet Explorer. Если вам требуется поддержка старых браузеров, на выбор предлагается пара полифилов: один доступен на странице метода в MDN , а другой написан Матиасом Биненсом и называется Array.from .
Array.prototype.find ()
Еще один из представленных методов — Array.prototype.find()
. Синтаксис этого метода:
Array.prototype.find(callback[, thisArg])
Как видите, он принимает функцию обратного вызова, используемую для проверки элементов массива, и необязательный аргумент для установки контекста ( this
значения) функции обратного вызова. Функция обратного вызова получает три параметра:
-
element
: текущий элемент -
index
: индекс текущего элемента -
array
: массив, который вы использовали для вызова метода.
Этот метод возвращает значение в массиве, если он удовлетворяет предоставленной функции обратного вызова или undefined
противном случае. Обратный вызов выполняется один раз для каждого элемента в массиве, пока не найдет элемент, в котором будет возвращено истинное значение. Если в массиве более одного элемента, он вернет истинное значение, и будет возвращен только первый.
Пример использования показан ниже:
const arr = [1, 2, 3, 4]; const result = arr.find(function(elem) { return elem > 2; }); // prints "3" because it's the first // element greater than 2 console.log(result);
Демонстрационная версия предыдущего кода показана ниже и также доступна на JSBin .
Метод поддерживается в Node и во всех современных браузерах, за исключением Internet Explorer. Если вам нужен полифилл, он указан на странице метода в MDN .
Array.prototype.findIndex ()
Метод, который очень похож на предыдущий, это Array.prototype.findIndex()
. Он принимает те же аргументы, но вместо возврата первого элемента, который удовлетворяет функции обратного вызова, он возвращает свой индекс. Если ни один из элементов не возвращает истинное значение, возвращается -1
. Пример использования этого метода показан ниже:
const arr = [1, 2, 3, 4]; const result = arr.findIndex(function(elem) {return elem > 2;}); // prints "2" because is the index of the // first element greater than 2 console.log(result);
Демонстрационная версия предыдущего кода показана ниже и также доступна на JSBin .
Метод поддерживается в Node и во всех современных браузерах, за исключением Internet Explorer. Если вам нужен полифилл, его можно найти на странице метода в MDN .
Array.prototype.keys ()
Еще одним методом, представленным в этой новой версии JavaScript, является Array.prototype.keys()
. Этот метод возвращает новый Array Iterator
(не массив), содержащий ключи значений массива. Мы рассмотрим итераторы массива в следующей статье, но если вы хотите узнать о них больше сейчас, вы можете обратиться к спецификациям или странице MDN .
Синтаксис Array.prototype.keys()
показан ниже:
Array.prototype.keys()
Пример использования следующий:
const arr = [1, 2, 3, 4]; const iterator = arr.keys(); // prints "0, 1, 2, 3", one at a time, because the // array contains four elements and these are their indexes let index = iterator.next(); while(!index.done) { console.log(index.value); index = iterator.next(); }
Живая демоверсия показана ниже и также доступна на JSBin .
Array.prototype.keys()
в Node и во всех современных браузерах, за исключением Internet Explorer.
Array.prototype.values ()
Таким же образом мы можем получить ключи массива, мы можем получить его значения, используя Array.prototype.values()
. Этот метод похож на Array.prototype.keys()
но отличие состоит в том, что он возвращает Array Iterator
содержащий значения массива.
Синтаксис этого метода показан ниже:
Array.prototype.values()
Пример использования показан ниже:
const arr = [1, 2, 3, 4]; const iterator = arr.values(); // prints "1, 2, 3, 4", one at a time, because the // array contains these four elements let index = iterator.next(); while(!index.done) { console.log(index.value); index = iterator.next(); }
Демонстрационная версия предыдущего кода показана ниже и также доступна на JSBin .
Array.prototype.values()
в настоящее время не реализован в большинстве браузеров . Для того, чтобы вы могли использовать его, вам нужно перенести его через Вавилон.
Array.prototype.fill ()
Если вы работали в мире PHP (как и я), вы вспомните функцию с именем array_fill()
которая отсутствовала в JavaScript. В ES6 этот метод больше не отсутствует. Array.prototype.fill()
заполняет массив указанным значением, необязательно от начального индекса до конечного индекса (не включен).
Синтаксис этого метода следующий:
Array.prototype.fill(value[, start[, end]])
Значения по умолчанию для start
и end
соответственно равны 0
и length
массива. Эти параметры также могут быть отрицательными. Если start
или end
отрицательны, позиции рассчитываются, начиная с конца массива.
Пример использования этого метода показан ниже:
const arr = new Array(6); // This statement fills positions from 0 to 2 arr.fill(1, 0, 3); // This statement fills positions from 3 up to the end of the array arr.fill(2, 3); // prints [1, 1, 1, 2, 2, 2] console.log(arr);
Демонстрационная версия предыдущего кода показана ниже и также доступна на JSBin .
Метод поддерживается в Node и во всех современных браузерах, за исключением Internet Explorer. В качестве полизаполнения вы можете использовать тот, что на странице метода в MDN , или полифилл, разработанный Адди Османи .
Вывод
В этой статье мы обсудили несколько новых методов, представленных в ES6, которые работают с массивами. За исключением Array.prototype.values()
, они имеют хорошую поддержку браузера и могут использоваться сегодня!