Статьи

ES6 в действии: новый Array. * И Array.prototype. * Методы

В этой статье мы обсудим большинство новых методов, доступных в 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() , они имеют хорошую поддержку браузера и могут использоваться сегодня!