Вход/Регистрация
JavaScript. Подробное руководство, 6-е издание
вернуться

Флэнаган Дэвид

Шрифт:

7.9.3. Метод filter

Метод

filter
возвращает массив, содержащий подмножество элементов исходного массива. Передаваемая ему функция должна быть функцией-предикатом, т.е. должна возвращать значение
true
или
false
. Метод
filter
вызывает функцию точно так же, как методы
forEach
и
map
. Если возвращается
true
или значение, которое может быть преобразовано в
true
, переданный функции элемент считается членом подмножества и добавляется в массив, возвращаемый методом. Например:

а = [5, 4, 3, 2, 1];

smallvalues = a.filter(function(x) { return х < 3 }); // [2, 1]

everyother = a.filter(function(x,і) { return і%2==0 }); // [5, 3, 1]

Обратите внимание, что метод

filter
пропускает отсутствующие элементы в разреженных массивах и всегда возвращает плотные массивы. Чтобы уплотнить разреженный массив, можно выполнить следующие действия:

var dense = sparse.filter(function { return true; });

А чтобы уплотнить массив и удалить из него все элементы со значениями undefined и null, можно использовать метод

filter
, как показано ниже:

а = a.filter(function(x) { return х !== undefined && х != null; });

7.9.4. Методы every и some

Методы

every
и
some
являются предикатами массива: они применяют указанную функцию-предикат к элементам массива и возвращают
true
или
false
. Метод
every
напоминает математический квантор всеобщности V: он возвращает
true
, только если переданная вами функция-предикат вернула
true
для всех элементов массива:

а = [1,2,3,4,5];

a.every(function(x) { return х < 10; }) // => true: все значения < 10.

a.every(function(x) { return х % 2 === 0; }) // => false: не все четные.

Метод

some
напоминает математический квантор существования 3: он возвращает
true
, если в массиве имеется хотя бы один элемент, для которого функция-предикат вернет
true
, а значение
false
возвращается методом, только если функция-предикат вернет
false
для всех элементов массива:

а = [1,2,3,4, 5];

a.some(function(x) { return х%2===0; }) // => true: имеются четные числа,

a.some(isNaN) // => false: нет нечисловых элементов.

Обратите внимание, что оба метода,

every
и
some
, прекращают обход элементов массива, как только результат становится известен. Метод
some
возвращает
true
, как только функция-предикат вернет
true
, и выполняет обход всех элементов массива, только если функция-предикат всегда возвращает
false
. Метод
every
является полной противоположностью: он возвращает
false
, как только функция-предикат вернет
false
, и выполняет обход всех элементов массива, только если функция-предикат всегда возвращает
true
. Кроме того, отметьте, что в соответствии с правилами математики для пустого массива метод
everу
возвращает true, а метод
some
возвращает
false
.

7.9.5. Методы reduce и reduceRight

Методы

reduce
и
reduceRight
объединяют элементы массива, используя указанную вами функцию, и возвращают единственное значение. Это типичная операция в функциональном программировании, где она известна также под названием «свертка». Примеры ниже помогут понять суть этой операции:

var а = [1,2,3,4,5]

var sum = a.reduce(function(x,у) { return х+у }, 0); // Сумма значений

var product = a.reduce(function(x,у) { return х*у }, 1); // Произвел, значений

var max = a.reduce(function(x,у) { return (х>у)?х:у; }); // Наибольш. значение

Метод

reduce
принимает два аргумента. В первом передается функция, которая выполняет операцию свертки. Задача этой функции - объединить некоторым способом или свернуть два значения в одно и вернуть свернутое значение. В примерах выше функции выполняют объединение двух значений, складывая их, умножая и выбирая наибольшее. Во втором (необязательном) аргументе передается начальное значение для функции.

  • Читать дальше
  • 1
  • ...
  • 92
  • 93
  • 94
  • 95
  • 96
  • 97
  • 98
  • 99
  • 100
  • 101
  • 102
  • ...

Ебукер (ebooker) – онлайн-библиотека на русском языке. Книги доступны онлайн, без утомительной регистрации. Огромный выбор и удобный дизайн, позволяющий читать без проблем. Добавляйте сайт в закладки! Все произведения загружаются пользователями: если считаете, что ваши авторские права нарушены – используйте форму обратной связи.

Полезные ссылки

  • Моя полка

Контакты

  • chitat.ebooker@gmail.com

Подпишитесь на рассылку: