February 17, 2020

Методы массивов: Array.isArray, some, every

Метод Array.isArray

Порой требуется понять, являются ли данные, которые, например, пришли с сервера – массивом. Как мы можем это узнать? Существует оператор typeof, но в JS нет отдельного типа для массивов. JS не различает массив от объекта: для него и то и другое – объекты. Но задачу как-то надо решать, именно для этого и существует статический метод isArray в объекте Array.

const obj = {name: 'Толян'};
const arr = [1, 2, 3];

Array.isArray(arr); //true
Array.isArray(obj); //false

Метод some

Представим, что у тебя есть массив чисел. При этом, предположим, что на момент работы с массивом ты точно не знаешь, какими числами он заполнен.

И тебе нужно узнать, что в массиве есть хотя бы один элемент, который можно разделить на 2 и полученное значению будет больше, либо равно 10.

В голову может прийти множество вариантов решений. Но метод some подойдет тут намного лучше:

const numbers = [20, 45, 12, -4, 5, 7];

const has = numbers.some(n => (n/2) >= 10);

has; // true

В данном случае под наше условие подойдет даже 2 числа 20 и 45, поэтому метод выдаст нам true.

Метод every

Метод every похож на метод some. Но, по названию должно быть понятно, что метод every вернет true только в том случае, если все элементы массива подходят под заданное условие.

Давай проверим каждый элемент массива на условие: каждый элемент делится 2 и полученное значение больше или равно 10.

const numbers = [20, 30, 40];
const otherNumbers = [20, 10, 40];

const hasInNumbers = numbers.every(n => (n/2) >= 10);
const hasInOtherNumbers = otherNumbers.every(n => (n/2) >= 10);

hasInNumbers; // true
hasInOtherNumbers; //false

Все элементы массива numbers подходят под условие – поэтому метод every выдает нам значение true.

А вот в массиве otherNumbers под условие не подходит значение 10, поэтому every возвратит – false.