Page 170 - Браун Э. - Изучаем JavaScript. Руководство по созданию современных веб-сайтов - 2017
P. 170
значение, которое вы возвращаете, используется как аккумулятор для следующего
элемента в массиве).
Другой пример - вычислительная статистика. Давайте, например, вычислим
среднее и дисперсию для набора данных.
.
const data = [ 3 . 3 , 5 , 7 2 , 1 2 , 4 , 6 , 1 0 . 3 ] ;
11 Алгоритм Дональда Кнута для вычисления дисперсии: Искусство
11 программирования, том 2 . Получисленные алгоритмы, 3-е изд . 2000 год
const stats = data . reduce ( ( a , х ) => {
a . N++;
let delta = х - a . mean;
a . m ean += delt / a . N ;
a
n
а . М 2 + = delta* ( x - a . m ea ) ;
return а ;
} , { N : О , mean : О , М 2 : О } ) ;
if ( s tats . N > 2 ) {
stats . v ariance = stats . M 2 / ( s tats . N - l ) ;
stats . stdev = Math . sqrt ( s tats . v arianc ) ;
e
И снова мы исцользуем объект как аккумулятор, поскольку необходимо несколь
ко переменных (в частности - mean и М2: при желании вместо N мы могли бы ис
пользовать индексный аргумент минус один).
Давайте рассмотрим еще один пример, демонстрирующий гибкость метода reduce
при использовании аккумулятора, тип которого мы еще не применяли, - строки.
e
const words = [ "Beachball " , "Rodeo" , "Ang l " ,
"
"Aardvark" , "Xylophone , "NovemЬe " , "Chocolate " ,
r
" Р арауа " , "Uniform" , "Joker" , " C lover" , "Bali " ] ;
const longWords = words . r educe ( ( а , w } => w . length>б ? а+" " + w : а , " " } . t ri ( } ;
m
11 longWords : "Beachball Aardvark Xylophone November Chocolate Uniform"
Здесь мы используем строковый аккумулятор для получения единой строки, со
держащей все слова, которые состоят более чем из шести символов. В качестве са
мостоятельного упражнения попробуйте переписать его, используя вместо reduce
методы filter и j o in (строковый метод). (Начните с ответа на вопрос "Почему не
обходимо вызвать trim после reduce?")
Надеюсь, вам понравилась мощь метода reduce. Из всех методов обработки мас
сива этот является наиболее универсальным и мощным.
Методы массива и уда л е н н ы е
и л и еще н е о п редел е н н ы е элементы
Зачастую недопонимание поведения методов массива ведет к неправильным
предположениям относительно обработки ими элементов, которые были удалены
Методы массива и удаленные или еще не определенные элементы 171

