рд╣рд╛рд▓ рдХреЗ рд╡рд░реНрд╖реЛрдВ рдореЗрдВ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдиреЗ рдЧрдВрднреАрд░ рд▓реЛрдХрдкреНрд░рд┐рдпрддрд╛ рд╣рд╛рд╕рд┐рд▓ рдХреА рд╣реИ, рдФрд░ рдЗрд╕рд▓рд┐рдП рдЗрд╕рдХреЗ рдиреБрдХрд╕рд╛рди рднреА рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рджрд┐рдЦрд╛рдИ рджреЗрдиреЗ рд▓рдЧреЗ рд╣реИрдВред рдирд┐рд╖реНрдкрдХреНрд╖рддрд╛ рдореЗрдВ, рдпрд╣ рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╣реИ рдХрд┐ рдХрд┐рд╕реА рднреА рднрд╛рд╖рд╛ рдореЗрдВ рдХреБрдЫ рд╣рдж рддрдХ рдЕрдкрдиреА рд╡рд┐рд░рд╛рд╕рдд рдФрд░ рдиреБрдХрд╕рд╛рди рджреЛрдиреЛрдВ рд╣реИрдВред
рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рдкрддреНрдерд░реЛрдВ рдХрд╛ рдПрдХ рдкреВрд░рд╛ рдмрдЧреАрдЪрд╛ рд╣реИред рдкрд╛рдиреА рдХреЗ рдиреАрдЪреЗ рдХрд╛ рдмрдЧреАрдЪрд╛ред
рд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрдВ, рдиреБрдХрд╕рд╛рди рдЗрддрдиреЗ рд╕рд╛рдорд╛рдиреНрдп рдирд╣реАрдВ рд╣реИрдВ, рдЗрд╕рдХреЗ рд╡рд┐рдкрд░реАрдд, рдПрдХ рдЕрдЪреНрдЫрд╛ рдХреЛрдб рднрд╛рд╖рд╛ рдХреЗ рдПрдХ рд╕реНрд╡рд╕реНрде рд╕рдмрд╕реЗрдЯ рдХреЗ рд╣рд┐рд╕реНрд╕реЗ рдХреЗ рд░реВрдк рдореЗрдВ рд╡рд░реНрдгрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣реА рдХрд╛рд░рдг рд╣реИ рдХрд┐ рд╕рднреА рднрд╛рд╖рд╛ рдЯреНрд░рд┐рдХреНрд╕ рдХреЛ рдпрд╛рдж рд░рдЦрдирд╛ рдХрд╛рдлреА рдХрдард┐рди рд╣реИ: рд╡реЗ рд░реЛрдЬрдорд░реНрд░рд╛ рдХреЗ рдЕрднреНрдпрд╛рд╕ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рдирд╣реАрдВ рд╣реИрдВред рд╣рд╛рд▓рд╛рдВрдХрд┐, рднрд╛рд╖рд╛ рдирд┐рд░реНрдорд╛рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд╡рд┐рд╡рд┐рдз рд╕реАрдорд╛ рдорд╛рдорд▓реЗ рдорди рдХреЗ рд▓рд┐рдП рдПрдХ рдорд╣рд╛рди рдХрд╕рд░рдд рд╣реИрдВ, рд╕рд╛рде рд╣реА рд╕рд╛рде рднрд╛рд╖рд╛ рдХреЛ рдереЛрдбрд╝рд╛ рдмреЗрд╣рддрд░ рд╕реАрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреНрд░реЛрддреНрд╕рд╛рд╣рди рднреА рд╣реИред рдЖрдЬ рдХреА рдХреЙрдкреА рдиреЗ рдореЗрд░реА рдирдЬрд╝рд░ рдХреЛ
рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдкрдЬрд╝рд▓рд░реНрд╕ рдкрд╛рд╕ рдХрд░рдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рдкрдХрдбрд╝рд╛ред
рдореБрдЭреЗ
рдкреНрд░рд╢реНрди рд╕рдВрдЦреНрдпрд╛ 3 рдореЗрдВ рджрд┐рд▓рдЪрд╕реНрдкреА рдереА:
рдЗрд╕ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ (рдпрд╛ рдХрдИ) рдХрд╛ рдкрд░рд┐рдгрд╛рдо рдХреНрдпрд╛ рд╣реИ?
[ [3,2,1].reduce(Math.pow), [].reduce(Math.pow) ]
рдПрдХ рдЙрддреНрддрд░ рдХреЗ рд░реВрдк рдореЗрдВ, рд▓реЗрдЦрдХреЛрдВ, рдкрд╕рдВрдж рдкрд░, рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╡рд┐рдХрд▓реНрдк рджрд┐рдП рдЧрдП рд╣реИрдВ:
* рддреНрд░реБрдЯрд┐
*
[9, 0]
*
[9, NaN]
*
[9, undefined]
рдЗрд╕ рдкреНрд░рд╢реНрди рдХрд╛ рдЙрддреНрддрд░ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдХреЗрд╡рд▓ рджреБрднрд╛рд╖рд┐рдпрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП, рджреБрднрд╛рд╖рд┐рдП рдХреЛ рд╢реБрд░реВ рдХрд┐рдП рдмрд┐рдирд╛, рдЗрд╕реЗ рдЖрдЬрд╝рдорд╛рдПрдВ
рдЗрд╕ рддрдереНрдп рдХреЗ рдмрд╛рд╡рдЬреВрдж рдХрд┐ рдЙрджрд╛рд╣рд░рдг рдХрд╛рдлреА рджреВрд░рд╕реНрде рд╣реИ, рдлрд╝рдВрдХреНрд╢рди рдФрд░ рдЖрдВрд╢рд┐рдХ рд░реВрдк рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд╕рдВрдЧреНрд░рд╣ рдХреЗ рд▓рд┐рдП рдЖрд╡реЗрджрди рдЬреЗрдПрд╕ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдЕрднреНрдпрд╛рд╕ рд╣реИ, рдФрд░, рд╕рд╛рдорд╛рдиреНрдп рдЙрдкрдпреЛрдЧ рдХреЗ рд╕рд╛рде, рдпрд╣ рдХреЛрдб рдХреНрд▓реАрдирд░ рдмрдирд╛рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реИ, рджреЛрдиреЛрдВ рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ - рдЗрд╕реЗ рдЕрдирд╛рд╡рд╢реНрдпрдХ рдмрдВрдж рд╣реЛрдиреЗ рд╕реЗ рдмрдЪрд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдФрд░ рджреГрд╢реНрдп рдореЗрдВ рдпреЛрдЬрдирд╛ - рдХрдо рдмреНрд░реИрдХреЗрдЯ рдХрдЪрд░рд╛ (рдкреНрд░реАрдкреНрд░реЛрд╕реЗрд╕рд░реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рд╢реНрди рджреВрд╕рд░реЗ рд▓реЗрдЦ рдХреЗ рд▓рд┐рдП рдЫреЛрдбрд╝ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ)ред
рдФрд░ рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рдЖрдк рдкрд╛рдПрдВрдЧреЗ:
* рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдгред
* рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╡рд┐рд╢реБрджреНрдз рд░реВрдк рд╕реЗ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕реЗ
reduce
рд╣реЛ рдЬрд╛рддреА рд╣реИред
*
reduce
рд╕рд╛рде рдХрдИ рд╢реИрдХреНрд╖рдгрд┐рдХ рдЕрдзреНрдпрдпрди (рджреЗрдЦрдиреЗ рдХреЗ рдПрдХ рдЕрдХрд╛рджрдорд┐рдХ рдмрд┐рдВрджреБ рд╕реЗ
reduce
)ред
* рд▓реЗрдЦ рдХреЗ рд▓рд┐рдП рдмрдиреНрд╕ рдХреЗ рд╕рд╛рде рднрдВрдбрд╛рд░ред
* рдХрдИ рдЕрдиреНрдп
reduce
ред
рдЯрд╛рд╕реНрдХ рдкрд╛рд░реНрд╕рд┐рдВрдЧ
рдареАрдХ рд╣реИ, рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рд▓реЗрдЦ рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ рдХрд╛рд░реНрдп рд╕реЗ рдирд┐рдкрдЯреЗрдВрдЧреЗред рдФрд░ рдкрд░реНрдпрд╛рдкреНрдд рд╡рд┐рдХрд▓реНрдк рд╣реИрдВред
reduce
(рдЗрд╕рдХреЗ рдмрд╛рдж
Array.prototype.reduce
рд░реВрдк рдореЗрдВ
Array.prototype.reduce
рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ),
Array
рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдХреЗ рдЕрдиреНрдп рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд╕рд╛рде:
filter
,
map
,
forEach
,
some
,
every
, рдПрдХ рдЙрдЪреНрдЪ-рдХреНрд░рдо рдлрд╝рдВрдХреНрд╢рди рд╣реИ, рдЕрд░реНрдерд╛рдд, рдпрд╣ рдЗрдирдкреБрдЯ рдХреЗ рд▓рд┐рдП рдПрдХ рдФрд░ рдлрд╝рдВрдХреНрд╢рди рд▓реЗрддрд╛ рд╣реИ (рд╣рдо рдЗрд╕реЗ рдкрд╛рд░рд┐рдд рдХрд╣реЗрдВрдЧреЗ) рд╕рдорд╛рд░реЛрд╣
f*
)ред рд╕рдВрдЧреНрд░рд╣ рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рдЖрдЗрдЯрдо рдХреЗ рд▓рд┐рдП
f*
рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреБрдЫ рддрд░реНрдХреЛрдВ рдХреЗ рд╕рд╛рде рдмреБрд▓рд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рд╕рдВрдЧреНрд░рд╣ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдХреБрдЫ рдХреБрд▓ рдореВрд▓реНрдп рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП
reduce
рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рдкреНрд░рддреНрдпреЗрдХ рддрддреНрд╡ рдкрд░ рдХреНрд░рдорд┐рдХ рд░реВрдк рд╕реЗ
f*
рд▓рд╛рдЧреВ рд╣реЛрддрд╛ рд╣реИ, рдЗрд╕реЗ рдЪрд░ рдХреЗ рд╡рд░реНрддрдорд╛рди рдореВрд▓реНрдп рдХреЛ рдкрд╛рд░рд┐рдд рдХрд░рдирд╛ рдЬрд┐рд╕рдореЗрдВ рдкрд░рд┐рдгрд╛рдо (рдмреИрдЯрд░реА) рдФрд░ рд╡рд░реНрддрдорд╛рди рддрддреНрд╡ рдЬрдорд╛ рд╣реЛ рд░рд╣реЗ рд╣реИрдВред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛,
reduce
рдЖрдк рдмреИрдЯрд░реА рдХреЗ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдореВрд▓реНрдп рдХреЛ рдкрд╛рд░рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, (!)
рдЗрд╕ рдорд╛рди рдХреЗ рдкрд╛рд░рд┐рдд рд╣реЛрдиреЗ рдпрд╛ рди рд╣реЛрдиреЗ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рд╡реНрдпрд╡рд╣рд╛рд░
reduce
рд╣реЛ рдЬрд╛рдПрдЧрд╛ ред
Math.pow
рдлрд╝рдВрдХреНрд╢рди
Math.pow
рдХрд░рддрд╛ рд╣реИ, рдЕрд░реНрдерд╛рдд, рдЗрд╕рдХрд╛ рд╡реНрдпрд╡рд╣рд╛рд░
рдкрд╛рд╕ рдХреА рдЧрдИ рдбрд┐рдЧреНрд░реА рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рднрд┐рдиреНрди рд╣реЛрддрд╛ рд╣реИ : рдпрд╣ рдПрдХ рд╡рд░реНрдЧ, рдШрди рдпрд╛ рд╡рд░реНрдЧрдореВрд▓, рдпрд╛ рдХреЛрдИ рдЕрдиреНрдп рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдбрд┐рдЧреНрд░реА рд╣реЛ рд╕рдХрддрд╛ рд╣реИред
рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкреНрд░рд╢реНрди рдЦреБрд▓реЗ рд░рд╣рддреЗ рд╣реИрдВ:
* рдЦрд╛рд▓реА рд╕рд░рдгреА рдкрд░ рдХреЙрд▓ рдХрд░рдиреЗ рдкрд░ рд╡реНрдпрд╡рд╣рд╛рд░
reduce
рдХреИрд╕реЗ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ?
* рдпрджрд┐ рд╡рд╣ рдЕрдкрдиреА рдбрд┐рдЧреНрд░реА рдкреВрд░реА рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ рддреЛ
Math.pow
рдХреИрд╕реЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░рддрд╛ рд╣реИ?
рдорд╛рдирдХ JS рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рд╕рд╛рдорд╛рдиреНрдп рддреНрд░реБрдЯрд┐ рд╣реИрдВрдбрд▓рд┐рдВрдЧ рдиреАрддрд┐ рдирд╣реАрдВ рд╣реИред рдХреБрдЫ рдлрд╝рдВрдХреНрд╢рди рд╕рдЦреНрддреА рд╕реЗ рдХрд╛рд░реНрдп рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ: рдпрджрд┐ рдЕрдкрд╡рд╛рджрд┐рдд рдбреЗрдЯрд╛ рдореЗрдВ рдХреБрдЫ рдЧрд▓рдд рд╣реИ, рддреЛ рдЕрдкрд╡рд╛рдж рдХреЛ рдлреЗрдВрдХ рджреЗрдВ, рдХреБрдЫ рд╕рднреА рдкреНрд░рдХрд╛рд░ рдХреЗ рдЦрд╛рд▓реА рдорд╛рди рд▓реМрдЯрд╛рдПрдВрдЧреЗ:
null
,
undefined
,
NaN
, рдЬрдмрдХрд┐ рдЕрдиреНрдп рдЕрдиреБрдореЗрдп рд░реВрдк рд╕реЗ рдХрд╛рдо рдХрд░реЗрдВрдЧреЗ: рд╡реЗ рдХрд╛рдлреА рдбреЗрдЯрд╛ рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рднреА рдХреБрдЫ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВрдЧреЗред
рд╕рд┐рд░реНрдл рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╕реЗ рдХрд┐рддрдиреЗ рд╕рд╡рд╛рд▓ рдЦрдбрд╝реЗ рд╣реЛ рдЧрдПред
рдФрд░ рдЕрдм рд╕рд╣реА рдЙрддреНрддрд░: рд╣рдореЗрдВ рдПрдХ
TypeError
рдорд┐рд▓рддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рджреВрд╕рд░рд╛ рдЙрдкрдкреНрд░рдХрд╛рд░ рджреЛрд╖ рд╣реИред рдПрдХ рдЦрд╛рд▓реА рд╕рд░рдгреА рдкрд░
рдФрд░ рдмрд┐рдирд╛ рдПрдХ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдорд╛рди рдХреЗ рдлрд╝рдВрдХреНрд╢рди
reduce
рдЬрд╛рддрд╛ рд╣реИред
рдРрд╕рд╛ рдХреНрдпреЛрдВ? reduce
рдХреЗ рд╡рд┐рдирд┐рд░реНрджреЗрд╢ рдкрдврд╝реЗрдВ
рдареАрдХ рд╣реИ, рдЖрдЗрдП
рдкрдврд╝рддреЗ рд╣реИрдВ рдХрд┐
MDN Array.prototyp.reduce рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛ рд▓рд┐рдЦрддрд╛
рд╣реИ ред рдлрд╝рдВрдХреНрд╢рди рдХреА рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕реВрдХреНрд╖реНрдорддрд╛рдПрдБ рд╕реНрдкрд╖реНрдЯ рдХреА рдЧрдИ рд╣реИрдВ:
рдпрджрд┐
initialValue
рдкрд╛рд░рд┐рдд рд╣реЛ рдЧрдпрд╛ рд╣реИ, рддреЛ рдкрд╣рд▓реЗ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдкрд░, рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдЗрд╕ рдорд╛рди рдФрд░ рд╕рд░рдгреА рдХреЗ рдкрд╣рд▓реЗ рддрддреНрд╡ рдХреЗ рдореВрд▓реНрдп рдХреЗ рд╕рд╛рде рдмреБрд▓рд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдпрджрд┐
initialValue
рдкрд╛рд░рд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рддреЛ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рд╕рд░рдгреА рдХреЗ рдкрд╣рд▓реЗ рдФрд░ рджреВрд╕рд░реЗ рддрддреНрд╡реЛрдВ рдХреЗ рдореВрд▓реНрдпреЛрдВ рдХреЗ рд╕рд╛рде рдмреБрд▓рд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдпрд╣ рднреА рдЕрдиреБрд╕рд░рдг рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдпрджрд┐ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдорд╛рди рдкрд╛рд░рд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ
рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдПрдХ рдХрдо рд╕рдордп рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ , рдЕрдиреНрдпрдерд╛ рдмрд┐рд▓реНрдХреБрд▓ рдХрдИ рдмрд╛рд░ рдЬреИрд╕рд╛ рдХрд┐ рд╕рд░рдгреА рдореЗрдВ рддрддреНрд╡ рд╣реЛрддреЗ рд╣реИрдВред
рдЖрдк рдЗрд╕ рддрд░рд╣
initialValue
рд╕рд╛рде рдПрдХ рдлрд╛рд░реНрдо рдЬрдорд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
array.reduce(fn, initialValue) тЗФ [ initialValue ].concat(array).reduce(fn);
рджреВрд╕рд░рд╛ рджрд┐рд▓рдЪрд╕реНрдк рдкрд╣рд▓реВ рдПрдХ рдЦрд╛рд▓реА рд╕рд░рдгреА рдХреЛ рд╕рдВрднрд╛рд▓ рд░рд╣рд╛ рд╣реИред рдпрджрд┐ рд╕рд░рдгреА рдЦрд╛рд▓реА рд╣реИ рдФрд░ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдорд╛рди рдкрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рддреЛ рдпрд╣ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдкрд░рд┐рдгрд╛рдо рд╣реИ, рдФрд░ рдкрд░рд┐рдгрд╛рдо
f*
рдЕрдирджреЗрдЦрд╛ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ ред рдпрджрд┐ рд╕рд░рдгреА рдЦрд╛рд▓реА рд╣реИ рдФрд░ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдорд╛рди рдкрд╛рд░рд┐рдд рдирд╣реАрдВ рд╣реБрдЖ рд╣реИ, рддреЛ рдПрдХ
TypeError
рдлреЗрдВрдХрд╛ рдЬрд╛рддрд╛ рд╣реИред
[].reduce(fn, initialValue) тЗФ [ initialValue ].reduce(fn) тЗТ initialValue; [].reduce(fn) тЗТ TypeError;
рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд╛рдлреА рддрд╛рд░реНрдХрд┐рдХ рд╣реИ: рдпрд╣ рдЗрдирдкреБрдЯ рдбреЗрдЯрд╛ рд╕реЗ рдореВрд▓реНрдпреЛрдВ рдХреЗ рд╕рд╛рде
f*
рдХреЙрд▓ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддрд╛ рд╣реИред рдпрджрд┐ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдорд╛рди рдкрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рддреЛ рдпрд╣ рдПрдХ рдбреЗрдЯрд╛ рддрддреНрд╡ рд╣реИ рдЬреЛ рдкрд╣рд▓реЗ рддрддреНрд╡ рд╕реЗ рдкрд╣рд▓реЗ рд╣реИред рдпрджрд┐ рдХреБрдЫ рднреА рдкреНрд░реЗрд╖рд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ (рдХреЛрдИ рддрддреНрд╡ рдФрд░ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдореВрд▓реНрдп рдирд╣реАрдВ рд╣реИрдВ), рддреЛ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдкрд╛рд╕ рдХреБрд▓ рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рдбреЗрдЯрд╛ рдирд╣реАрдВ рд╣реИ, рдФрд░ рдпрд╣ рдПрдХ рдЕрдкрд╡рд╛рдж рдлреЗрдВрдХрддрд╛ рд╣реИред рдПрдХ рддрд░рд╣ рд╕реЗ рдпрд╛ рдХрд┐рд╕реА рдЕрдиреНрдп, рд╡реНрдпрд╡рд╣рд╛рд░ рдереЛрдбрд╝рд╛ рдЬрдЯрд┐рд▓ рд╣реИ рдФрд░ рдПрдХ рдЧрдбреНрдврд╛ рдмрди рд╕рдХрддрд╛ рд╣реИред
reduce
, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдПрдХ рддрд░реНрдХ рдХреЗ рд▓рд┐рдП рдФрд░ рджреЛ рдХреЗ рд▓рд┐рдП рдЕрддрд┐рднрд╛рд░рд┐рдд рд╣реИ, рдФрд░ рдЕрддрд┐рднрд╛рд░рд┐рдд рд╡рд┐рдХрд▓реНрдкреЛрдВ рдореЗрдВ рдЦрд╛рд▓реА рд╕рд░рдгреА рдкрд░ рдЕрд▓рдЧ рд╡реНрдпрд╡рд╣рд╛рд░ рд╣реЛрддрд╛ рд╣реИред
рдЕрдм рд╣рдо рд╕рдордЭ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рдРрд╕рд╛ рдкрд░рд┐рдгрд╛рдо рдХреНрдпреЛрдВ рд╣реЛрддрд╛ рд╣реИ, рдЕрд░реНрдерд╛рддреН, рджреВрд╕рд░рд╛ рд╕рдмрдкреНрд░реЗрдкреНрд░реЗрд╢рди рдПрдХ рдЕрдкрд╡рд╛рдж рдлреЗрдВрдХрддрд╛ рд╣реИ: рдЗрд╕реЗ рдЦрд╛рд▓реА рдЗрдирдкреБрдЯ рд╕реВрдЪреА рдХреЗ рд╕рд╛рде рдФрд░ рдмрд┐рдирд╛ рдореВрд▓реНрдп рдХреЗ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рд▓реЗрдХрд┐рди! рдкрд╣рд▓реА рдЙрдкрд╕рдВрдЪрд╛рдИ рдХреА рдЧрдгрдирд╛ рдЕрднреА рднреА рдХреА рдЬрд╛рддреА рд╣реИред рдореИрдВ рдЗрд╕ рдЧрдгрдирд╛ рдХреЛ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрднреНрдпрд╛рд╕ рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рдпрд╛рд╕ рдХрд░рдиреЗ рдХрд╛ рд╕реБрдЭрд╛рд╡ рджреЗрддрд╛ рд╣реВрдВред рдЖрдк рджреЛ рддрд░реАрдХреЛрдВ рд╕реЗ рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ:
* рдЬреЗрдбреА: рджрд┐рдорд╛рдЧ рдореЗрдВ рдХреЛрдб рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░реЗрдВ, рдпрд╣ рдЬрд╛рдирддреЗ рд╣реБрдП рдХрд┐ рдХреИрд╕реЗ
reduce
рдФрд░
Math.pow
ред
* рдЪрд░рд╡рд╛рд╣рд╛: рдЗрд╕ рдХреЛрдб рдХреЛ REPL рдореЗрдВ рдЪрд▓рд╛рдПрдВ рдФрд░ рдкрд░рд┐рдгрд╛рдо рдХреЗ рд▓рд┐рдП рддрд░реНрдХ рдХреЛ рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ рдкреНрд░рд╕реНрддреБрдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВред
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЖрдк рдЕрдкрдиреЗ рдЙрджрд╛рд╣рд░рдг рд╕реЗ рдЦреБрдж рдХреЛ рдкрд░рд┐рдЪрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬрд┐рд╕рд╕реЗ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╕рдордЭрдиреЗ рдореЗрдВ рдорджрдж рдорд┐рд▓реЗрдЧреА:
StreetStrider / habrahabr- рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ-рдХрдо рдХрд░реЗрдВ: рдкрд░реАрдХреНрд╖рдг / puzzler.js ред рдпрд╣ рдЪрдореЗрд▓реА рдХреА рдкрд░реАрдХреНрд╖рд╛ рд╣реИред
рдЬрд╛рджреВ рдФрд░ рдЖрдХрд░реНрд╖рдг reduce
reduce
рдЙрд▓реНрд▓реЗрдЦрдиреАрдп рд╣реИ рдХрд┐ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ
Array
рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рдЕрдиреНрдп рд╕рднреА рдЙрдЪреНрдЪ-рдХреНрд░рдо рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:
forEach
,
filter
,
map
,
some
,
every
ред
рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реЛ рдЬрд╛рдПрдЧрд╛ рдпрджрд┐ рдЖрдк рдЗрд╕ рд╡рд┐рдЪрд╛рд░ рд╕реЗ рдЫреБрдЯрдХрд╛рд░рд╛ рдкрд╛ рд▓реЗрддреЗ рд╣реИрдВ рдХрд┐
reduce
рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд░рдгреА рдореЗрдВ рдорд╛рдиреЛрдВ рдХреЗ рд╕рдорд╛рди рдкреНрд░рдХрд╛рд░ рдХреЗ рдореВрд▓реНрдп рдХреЛ рдЬрдорд╛ рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИред рджрд░рдЕрд╕рд▓, рдпрд╣ рд╕реЛрдЪрдирд╛ рддрд░реНрдХрд╕рдВрдЧрдд рд╣реИ рдХрд┐ рдпрджрд┐ рд╣рдо рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХреЛ рд▓реЗрддреЗ рд╣реИрдВ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ, рддреЛ рд╣рдореЗрдВ рдПрдХ рд╕рдВрдЦреНрдпрд╛ рднреА рдорд┐рд▓рддреА рд╣реИред рдпрджрд┐ рд╣рдо рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕ рдХреА рдПрдХ рд╕рд░рдгреА рд▓реЗрддреЗ рд╣реИрдВ рдФрд░ рдЙрдиреНрд╣реЗрдВ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╣рдо рд╕реНрдЯреНрд░рд┐рдВрдЧ рднреА рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВред рдпрд╣ рд╕реНрд╡рд╛рднрд╛рд╡рд┐рдХ рд╣реИ, рд▓реЗрдХрд┐рди рдПрд░реЗ рдФрд░ рд╡рд╕реНрддреБрдУрдВ рдХреЛ рд╡рд╛рдкрд╕
reduce
рднреА рд╕рдХреНрд╖рдо рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╕реНрдерд╛рдирд╛рдВрддрд░рдг рдмреИрдЯрд░реА рд╕реЗ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рд╕реЗ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдХреЗ рд▓рд┐рдП рд╣реЛрдЧрд╛ред рдпрд╣ рдЖрдкрдХреЛ рдХрд┐рд╕реА рднреА рдЬрдЯрд┐рд▓рддрд╛ рдХреЗ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ
reduce
рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЪрд▓реЛ рдПрдХ
map
рдмрдирд╛рдПрдБ:
function map$viaReduce (array, fn) { return array.reduce(function (memo, item, index, array) { return memo.concat([ fn(item, index, array) ]); }, []); };
рдпрд╣рд╛рдВ, рд╕рдВрдЪрд┐рдд рд╕рд░рдгреА рдХреЛ рдмреИрдЯрд░реА рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкреНрд░реЗрд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рдореВрд▓ рдХреЗ рд╕рдорд╛рди рдЖрдХрд╛рд░ рд╣реЛрдЧрд╛, рд▓реЗрдХрд┐рди рдЯреНрд░рд╛рдВрд╕рдлрд╛рд░реНрдорд░ рдлрд╝рдВрдХреНрд╢рди
fn
рдорд╛рдзреНрдпрдо рд╕реЗ рдкрд╛рд░рд┐рдд рдореВрд▓реНрдпреЛрдВ рдХреЗ рд╕рд╛рдеред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдпрд╣ рднреВрд▓ рдирд╣реАрдВ рд╣реИ,
fn
рди рдХреЗрд╡рд▓ рддрддреНрд╡ рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддрд╛ рд╣реИ, рдмрд▓реНрдХрд┐ рдирд┐рдореНрди рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд╕рд╛рде рд╕реВрдЪрдХрд╛рдВрдХ рдФрд░ рд╕рд░рдгреАред рдЕрдЧрд░
fn
рдПрд░реЗ рд▓реМрдЯрд╛рддрд╛ рд╣реИ рддреЛ
concat
рдлрдВрдХреНрд╢рди
concat
рдкреИрд░рд╛рдореАрдЯрд░ рд╡реИрд▓реНрдпреВ рдХреЗ "рдПрдХреНрд╕рдкреЗрдВрд╢рди" рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрд░реИ рдореЗрдВ рд▓рд┐рдкрдЯреЗ рд░рд╣рддрд╛ рд╣реИред рдПрдХ рдЦрд╛рд▓реА рд╕рд░рдгреА рдХреЛ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдореВрд▓реНрдп рдХреЗ рд░реВрдк рдореЗрдВ рдкрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдпрд╣ рдХреЛрдб рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдореЗрдВ рд╣реИ, рдФрд░ рдЗрд╕рдХреЗ рд▓рд┐рдП рдкрд░реАрдХреНрд╖рдг рд╣реИрдВред
рдЬреЛ рд▓реЛрдЧ рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВ, рдЙрдирдХреЗ рд▓рд┐рдП рдореИрдВ рд╡реНрдпрд╛рдпрд╛рдо рдХреЗ рд░реВрдк рдореЗрдВ
filter
рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХрд╛ рд╕реБрдЭрд╛рд╡ рджреЗрддрд╛ рд╣реВрдВ, рдФрд░ рдорд╛рддреНрд░рд╛рддреНрдордХ рдХрд╛рд░реНрдпреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ:
some
рдпрд╛
every
ред рдЖрдк рджреЗрдЦреЗрдВрдЧреЗ рдХрд┐ рд╣рд░ рдЬрдЧрд╣ рд╕рдВрдЪрд┐рдд рд╕рд░рдгреА рдХреА рд╡рд╛рдкрд╕реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдПрдХ рдФрд░ рдЧреИрд░-рддреБрдЪреНрдЫ рдЙрджрд╛рд╣рд░рдг рдЬреЛ рджрд┐рдорд╛рдЧ рдореЗрдВ рдЖрддрд╛ рд╣реИ, рд╡рд╣
uniq
рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╣реИред рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рдЬрд╛рдирддреЗ рд╣реИрдВ, рдорд╛рдирдХ рдорд╛рдирдХ рдореЗрдВ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрдИ рдЖрд╡рд╢реНрдпрдХ рдЪреАрдЬреЛрдВ рдХреА рдХрдореА рд╕реЗ рдЧреНрд░рд╕реНрдд рд╣реИред рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рдРрд╕рд╛ рдХреЛрдИ рдлрд╝рдВрдХреНрд╢рди рдирд╣реАрдВ рд╣реИ рдЬреЛ рд╕рд░рдгреА рдореЗрдВ рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рдХреЛ рд╕рдорд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдбреЗрд╡рд▓рдкрд░реНрд╕ рд╡рд┐рднрд┐рдиреНрди рдХрд╕реНрдЯрдо рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ (рдореИрдВ рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ LoDash / рдЕрдВрдбрд░рд╕реНрдХреЛрд░ рд╕реЗ _.uniq рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рд╕рд▓рд╛рд╣ рджреЗрддрд╛ рд╣реВрдВ)ред
рдпрд╣ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдереЛрдбрд╝рд╛ "
рд╣рд┐рдкрд╕реНрдЯрд░ " рд╣реИ, рд▓реЗрдХрд┐рди
reduce
рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреЗ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд░реВрдк рдореЗрдВ, рдпрд╣
reduce
ред
function uniq$viaReduce (array) { return array.reduce(function (memo, item) { return (~ memo.indexOf(item) ? null : memo.push(item)), memo; }, []); };
рдпрд╣рд╛рдВ рд╣рдо рдЯрд░реНрдирд░реА рдСрдкрд░реЗрдЯрд░ рдХреЗ рдЕрдВрджрд░ рд╕рд╛рдЗрдб рдЗрдлреЗрдХреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдЕрд░реНрдерд╛рддреН, рд╣рдо рддрддреНрд╡ рдХреЛ рд╕рд░рдгреА рдореЗрдВ рдзрдХреНрдХрд╛ рджреЗрддреЗ рд╣реИрдВ рдпрджрд┐ рдпрд╣ рд╡рд░реНрддрдорд╛рди рдЯреБрдХрдбрд╝реЗ рдкрд░ рдирд╣реАрдВ рдорд┐рд▓рд╛ рд╣реИред рдЯрд┐рд▓реНрдб рдСрдкрд░реЗрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ
-1
рд╕рд╛рде рддреБрд▓рдирд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдкреВрд░реА рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдПрдХ рдЕрд▓реНрдкрд╡рд┐рд░рд╛рдо рдСрдкрд░реЗрдЯрд░ рдореЗрдВ рд▓рд┐рдкрдЯреА рд╣реИ, рдЬреЛ рдкреНрд░рддреНрдпреЗрдХ рдЪрд░рдг рдкрд░ (рд╕рднреА рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рдмрд╛рдж)
memo
рджреЗрддрд╛ рд╣реИред рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рдпрд╣ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╕рд░рдгреА рдореЗрдВ рдЖрджреЗрд╢ рднреА рдмрдирд╛рдП рд░рдЦрддрд╛ рд╣реИред
рдХреЛрдб рдФрд░ рдкрд░реАрдХреНрд╖рдг рднрдВрдбрд╛рд░ рдореЗрдВ рд╣реИрдВред
рдареАрдХ рд╣реИ, "рдереЛрдбрд╝рд╛" рдирд╣реАрдВ, рдпрд╣ рдХреЛрдб рдмрд╣реБрдд рдЕрдЬреАрдм рдерд╛, рдпрд╣ рдореБрдЭреЗ рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдЪрд┐рдд рдард╣рд░рд╛рддрд╛ рд╣реИ рдФрд░ рдпрд╣ рдПрдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдкреНрд░рдХрд╛рд░ рдХрд╛ рдХрд╛рд░реНрдп рд╣реИ, рдЬрд┐рд╕рдХрд╛ рд╡реНрдпрд╡рд╣рд╛рд░ рдирд╣реАрдВ рдмрджрд▓реЗрдЧрд╛ред рдЕрдкрдиреЗ рдХреЛрдб рдореЗрдВ рдЕрдиреНрдп рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рд╕рд▓рд╛рд╣ рджреА рдЬрд╛рддреА рд╣реИ, рдЬрдмрдХрд┐
reduce
рдФрд░
indexOf
рджреЛрдиреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рдЗрд╕ рддрд░рд╣ рдХреЗ
uniq
рдХреЗ рдкреНрд░рджрд░реНрд╢рди рдХреЛ рдирдХрд╛рд░рд╛рддреНрдордХ рд░реВрдк рд╕реЗ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░реЗрдЧрд╛, рдФрд░ рдПрдХрд▓-рд▓рд╛рдЗрди рдФрд░ рдЯрд┐рд▓реНрдбреНрд╕ рдХрд╛ рдкреНрд░рдЪреБрд░ рдЙрдкрдпреЛрдЧ рдкрдардиреАрдпрддрд╛ рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░реЗрдЧрд╛ред
рд╡рд╛рд░реНрдо-рдЕрдк рдХреЗ рд░реВрдк рдореЗрдВ, рдореИрдВ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреА рд╕рд▓рд╛рд╣ рджреЗрддрд╛ рд╣реВрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП,
zipObject
рдлрд╝рдВрдХреНрд╢рди,
zipObject
рд╕рд╛рд░ рдпрд╣ рд╣реИ рдХрд┐ рдпрд╣ рдЬреЛрдбрд╝реЗ (рд╕рд░рдгрд┐рдпреЛрдВ) рдХреЗ рдПрдХ рд╕рд░рдгреА рдХрд╛ рдЗрдирдкреБрдЯ рд▓реЗрддрд╛ рд╣реИ, рдЬрд╣рд╛рдВ рд╢реВрдиреНрдп рддрддреНрд╡ рдХреБрдВрдЬреА рд╣реИ рдФрд░ рдкрд╣рд▓рд╛ рдорд╛рди рд╣реИ, рдФрд░ рдирд┐рд░реНрдорд┐рдд
Object
рдХреЛ рд╕рдВрдмрдВрдзрд┐рдд рдХреБрдВрдЬрд┐рдпреЛрдВ / рдорд╛рдиреЛрдВ рдХреЗ рд╕рд╛рде рд▓реМрдЯрд╛рддрд╛ рд╣реИред
рднрдВрдбрд╛рд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рдЬрд╛рдиреЗрдВред
рдЙрджрд╛рд╣рд░рдг рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдПрдХ npm рдкреИрдХреЗрдЬ рд╣реИред рдЗрд╕реЗ github рдкрд░ рдкрддреЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:
npm install StreetStrider/habrahabr-javascript-reduce
src/
рдХрд╛рд░реНрдп рдХреЗ рдЙрджрд╛рд╣рд░рдг рд╣реИрдВ,
tests/
рдЪрдореЗрд▓реА рдкрд░реАрдХреНрд╖рдг рд╣реИрдВред рдЖрдк
npm test
рдкрд░реАрдХреНрд╖рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕рднреА рдкрд░реАрдХреНрд╖рдг рдЪрд▓рд╛ рд╕рдХрддреЗ рд╣реИрдВред
рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдореЗрдВ рдПрдХ рдбрд┐рдЧреНрд░реА (рдФрд░ рдЕрдиреНрдп рд╕реАрдорд╛ рдорд╛рдорд▓реЛрдВ) рдХреА рдЕрдиреБрдкрд╕реНрдерд┐рддрд┐ рдореЗрдВ
Math.pow
рдХреЗ рдЕрд░реНрде рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕рд╡рд╛рд▓ рдХрд╛ рдЬрд╡рд╛рдм рднреА рд╣реИред
рдЕрдиреНрдп reduce
* рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ,
reduce
рдПрдХ рдмреБрд░рд╛ рдЬреБрдбрд╝рд╡рд╛рдВ рднрд╛рдИ рд╣реИ, рдПрдХ рджрд╛рд╣рд┐рдиреЗ рд╣рд╛рде рдПрдирд╛рд▓реЙрдЧ:
reduceRight
ред рдорд╣рдВрдЧрд╛
reverse
рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЗ рдмрд┐рдирд╛, рджрд╛рдПрдВ рд╕реЗ рдмрд╛рдПрдВ рдУрд░ рдПрдЧреНрд░реАрдЧреЗрдЯ рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИред
* LoDash / рдЕрдВрдбрд░рд╕реНрдХреЛрд░
_.reduce
,
_.reduceRight
ред рдЙрдирдХреЗ рдкрд╛рд╕ рдХрдИ рдЕрддрд┐рд░рд┐рдХреНрдд рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ рд╣реИрдВред
* рдЕрдЬрдЧрд░ рдиреЗ
reduce
ред рд╣рд╛рдВред
рд▓реЗрдХрд┐рди рдпрд╣ рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рддреМрд░ рдкрд░ рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рдЕрдиреБрд╢рдВрд╕рд┐рдд рдирд╣реАрдВ рд╣реИ рдФрд░ рдЗрд╕реЗ рд╡реИрд╢реНрд╡рд┐рдХ рдирд╛рдо рд╕реНрдерд╛рди рд╕реЗ рднреА рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдЗрд╕рдХреЗ рдмрдЬрд╛рдп, рд╕реВрдЪреА рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐рдпреЛрдВ рдФрд░
for-in
рдирд┐рд░реНрдорд╛рдгреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рд╕реНрддрд╛рд╡ рд╣реИред рдЕрдзрд┐рдХ рдХреЛрдб рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдкрдардиреАрдп рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рддрд╛рдУ рднрд╛рд╖рд╛ рд╕реЗ рдореЗрд▓ рдЦрд╛рддреА рд╣реИред
* рдХреБрдЫ рднрд╛рд╖рд╛рдУрдВ рдореЗрдВ,
reduce/reduceRight
рдХреЛ
foldl/foldr
рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред
SQL рдореЗрдВ рдкрд╛рдБрдЪ рдорд╛рдирдХ рд╕рдореБрдЪреНрдЪрдп рд╣реИрдВ:
COUNT
,
SUM
,
AVG
,
MAX
,
MIN
ред рдЗрди рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдПрдХрд▓ рдЯреНрдпреВрдкрд▓ рдХреЗ рдкрд░рд┐рдгрд╛рдореА рдЪрдпрди рдХреЛ рдХрдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕реА рддрд░рд╣ рдХреЗ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ (
reduce
рдкрд░ рднреА) рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рд╡реИрд╕реЗ, рдкрд╛рдВрдЪ рдореЗрдВ рд╕реЗ рдЪрд╛рд░ рдПрдЧреНрд░реАрдЧреЗрдЯрд┐рдВрдЧ рдПрд╕рдХреНрдпреВрдПрд▓ рдлрд╝рдВрдХреНрд╢рдВрд╕ (рдХрд╛рдЙрдВрдЯ
COUNT
рдирд╣реАрдВ рдХрд░ рд░рд╣реЗ рд╣реИрдВ) рдпрджрд┐ рдЪрдпрди рдЦрд╛рд▓реА рд╣реИ рддреЛ
NULL
рд╡рд╛рдкрд╕ рд▓реМрдЯреЗрдВ (
COUNT
рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдорд╛рди рд▓реМрдЯрд╛рддрд╛ рд╣реИ:
0
)ред рдпрд╣ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдПрдХ рдЦрд╛рд▓реА рд╕реВрдЪреА рдкрд░ JS
TypeError
рдЕрдиреБрд░реВрдк рд╣реИред
postgres=
postgres=
рдкрд░рд┐рдгрд╛рдо
reduce
рдХрд░рдирд╛ рдПрдХ рд╢рдХреНрддрд┐рд╢рд╛рд▓реА рдХрд╛рд░реНрдп рд╣реИ рдЬрд┐рд╕рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рдЕрдиреНрдп рдЙрдЪреНрдЪ-рдХреНрд░рдо рдХреЗ рдХрд╛рд░реНрдпреЛрдВ, рдЬреИрд╕реЗ рдХрд┐
map
рдФрд░
filter
рдХреЛ рд╡реНрдпрдХреНрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕ рд╢рдХреНрддрд┐ рдХреЗ рд╕рд╛рде, рдЬрдЯрд┐рд▓рддрд╛
reduce
ред
reduce
рдХреЛ рд╡рд┐рднрд┐рдиреНрди рдпреЛрдЧреЛрдВ рдФрд░ рд╕рдореВрд╣реЛрдВ рдХреЗ рд▓рд┐рдП рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐, рдпрд╣ рдпрд╛рдж рд░рдЦрдиреЗ рдпреЛрдЧреНрдп рд╣реИ рдХрд┐ рдХрд┐рд╕реА рднреА рдПрдХрддреНрд░реАрдХрд░рдг рдХреЛ рдПрдХ рдирд┐рдпрдорд┐рдд рд▓реВрдк рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЬреЛ рдкрдврд╝рдиреЗ рдореЗрдВ рдЖрд╕рд╛рди рд╣реЛ рд╕рдХрддрд╛ рд╣реИред
рд╕рдВрджрд░реНрдн
рдзрдиреНрдпрд╡рд╛рдж
рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐
reduce
рдХреБрдЫ рднреА рд╡рд╛рдкрд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП
subzey рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред
рдЙрди рд╕рднреА рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж рдЬреЛ рдореБрдЭреЗ рд▓реЗрдЦ рдореЗрдВ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдФрд░ рдХрдорд┐рдпреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╡реНрдпрдХреНрддрд┐рдЧрдд рд╕рдВрджреЗрд╢реЛрдВ рдореЗрдВ рд▓рд┐рдЦрддреЗ рд╣реИрдВ, рд╕рд╛рде рд╣реА рд╕рд╛рде рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдореЗрдВ рднреАред
рдЖрдкрдХрд╛ рдзреНрдпрд╛рди рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред