С 2015 года JavaScript значительно улучшился.

Пользоваться им сейчас гораздо приятнее, чем когда-либо.

В этой статье мы рассмотрим метод Array.from и некоторые методы экземпляра.

Array.from и карта

Array.from принимает второй аргумент, который принимает функцию, которая сопоставляет запись с нужными нам значениями.

Например, мы можем написать:

const divs = document.querySelectorAll('div');
const texts = Array.from(divs, d => d.textContent);

Мы получаем элементы div с помощью метода querySelectorAll.

Затем мы вызываем Array.from с NodeList с div в качестве первого аргумента.

Второй аргумент — это обратный вызов, позволяющий нам сопоставить значение.

Это короче, чем писать:

const divs = document.querySelectorAll('div');
const texts = Array.prototype.map.call(divs, s => s.textContent);

Метод from является статическим, поэтому он будет унаследован, если мы создадим подкласс массива.

Например, мы можем написать;

const obj = {
  length: 1,
  0: 'foo'
};
class FooArray extends Array {
  //...
}
const arr = FooArray.from(obj);

Мы можем передать подобный массиву объект в FooArray.from так же, как и с любым массивом.

Функция отображения также работает.

Итак, мы можем написать:

class FooArray extends Array {
  //...
}
const divs = document.querySelectorAll('div');
const arr = FooArray.from(divs, d => d.textContent);

Мы вызвали FooArray.from так же, как и Array.from, и получили тот же результат.

Array.of

Array.of — еще один метод массива.

Требуется список аргументов, чтобы мы могли создать массив.

Это альтернатива конструктору Array.

Вместо того, чтобы писать:

const arr = new Array(1, 2, 3);

Мы можем написать:

const arr = Array.of(1, 2, 3);

Array.of лучше, поскольку возвращает массив с аргументами, даже если аргумент только один.

Это не относится к конструктору Array.

Если мы передадим один аргумент, то он попытается создать массив заданной длины.

Это также работает с подклассами Array.

Например, мы можем написать:

class FooArray extends Array {
  //...
}
const arr = FooArray.of(1, 2, 3);

Затем мы можем проверить, является ли arr экземпляром FooArray, написав:

console.log(arr instanceof FooArray);
console.log(arr.length === 3);

Array.prototype Методы

В ES6 также добавлены новые методы Array.prototype.

К ним относятся Array.prototype.entries() , Array.prototype.keys() и Array.prototype.entries() .

Array.prototype.entries() возвращает массив с массивами index и element в качестве записей.

Например, мы можем написать:

const arr = ['foo', 'bar', 'baz'];
for (const [index, element] of arr.entries()) {
  console.log(index, element);
}

index будет иметь индекс каждой записи, а element — элемент для каждого индекса.

Array.prototype.keys() имеют индекс массива.

Например, мы можем написать:

const arr = ['foo', 'bar', 'baz'];
for (const index of arr.keys()) {
  console.log(index);
}

Затем мы получаем значение index для каждой записи.

Array.prototype.values возвращает массив значений.

Итак, мы можем написать:

const arr = ['foo', 'bar', 'baz'];
for (const element of arr.values()) {
  console.log(element);
}

Поиск элементов массива

Мы можем искать элементы массива с помощью метода Array.prototype.find.

Он принимает predicate, который является обратным вызовом, который возвращает условие, которое мы ищем.

Второй аргумент — это значение для this, которое мы используем в нашем обратном вызове.

Он возвращает первый найденный элемент.

Если ничего не найдено, то возвращается undefined.

Например, мы можем написать:

const num = [2, -1, 6].find(x => x < 0)

тогда num равно -1.

Если мы напишем:

const num = [2, 1, 6].find(x => x < 0)

тогда num равно undefined .

Вывод

Array.from можно использовать для сопоставления элементов так, как мы хотим.

Кроме того, мы можем получать индексы и элементы и находить элементы различными способами.