ECMAScript рдкреНрд░рд╕реНрддрд╛рд╡: Array.prototypeред {рдлрд╝реНрд▓реИрдЯ, рдлрд╝реНрд▓реИрдЯрдореИрдк}

ECMAScript рдирд╡рд╛рдЪрд╛рд░реЛрдВ



рд╣реЗрд▓реЛ рд░реАрдбрд░реНрд╕ рд╣реИрдмрд░ред рдореИрдВ рдЖрдкрдХреЗ рдзреНрдпрд╛рди рдореЗрдВ рдПрдХ рджрд┐рд▓рдЪрд╕реНрдк рдмрд╛рдд рд▓рд╛рддрд╛ рд╣реВрдВ рдЬреЛ рдЬрд▓реНрдж рд╣реА рджрд┐рдЦрд╛рдИ рджреЗрдЧрд╛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдИрд╕реАрдПрдордПрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдорд╛рдирдХ рдореЗрдВ рджрд┐рдЦрд╛рдИ рджрд┐рдпрд╛ред рдпрд╣ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЙрдкрд▓рдмреНрдз рд╣реИред рд▓рдЧрднрдЧ рд╕рднреА рдмреНрд░рд╛рдЙрдЬрд╝рд░реЛрдВ рдореЗрдВ рдФрд░ рд╕рднреА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рднреАред рдпрд╣ рдирд╡рд╛рдЪрд╛рд░ рдХреЗрд╡рд▓ рдПрдХ рдЪреАрдиреА рдЖрд╡рд░рдг рд╣реИ рдФрд░ рдЗрд╕реЗ рдЖрдкрдХреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╣рд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдореИрдВ рдЖрдкрдХреЛ рдпрд╣ рднреА рджрд┐рдЦрд╛рдКрдВрдЧрд╛ред рд▓реЗрдХрд┐рди рдпрд╣ рдЪреАрдиреА рд╣рдореЗрдВ рдХрдо рдХреЛрдб рд▓рд┐рдЦрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧреА, рдХреНрдпреЛрдВрдХрд┐ рд╣рдо рдЗрд╕реЗ рдмрд╣реБрдд рдкрд╕рдВрдж рдХрд░рддреЗ рд╣реИрдВред рдЗрд╕рд▓рд┐рдП, рд╕рд░рдгреА рдореЗрдВ рдмреБрдирд┐рдпрд╛рджреА рдлрд╝рдВрдХреНрд╢рдВрд╕ рдЬреЛрдбрд╝реЗ рдЬрд╛рддреЗ рд╣реИрдВ, рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдЙрдирдореЗрдВ рд╕реЗ 2 рд╣реИрдВ, рдЬреЛ рд╣рдореЗрдВ рдмрд╣реБ-рд╕реНрддрд░реАрдп рд╕рд░рдгрд┐рдпреЛрдВ рдХреЛ рдПрдХ рдпрд╛ рдЕрдзрд┐рдХ рд╕реНрддрд░реЛрдВ рдХреЗ рдШреЛрдВрд╕рд▓реЗ рдХреЗ рд╢рд┐рдХрд╛рд░ рдореЗрдВ рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛ред рд╣рд╛рдВ, рд╣рд╛рдВ, рдФрд░ рдпрд╣ рд╕рдм рдЬреИрд╕рд╛ рдХрд┐ рд╡реЗ рдмреЙрдХреНрд╕ рд╕реЗ рдмрд╛рд╣рд░ рдХрд╣рддреЗ рд╣реИрдВ


ECMAScript рдкреНрд░рд╕реНрддрд╛рд╡: Array.prototypeред {рдлрд╝реНрд▓реИрдЯ, рдлрд╝реНрд▓реИрдЯрдореИрдк}


рдЗрд╕ рдкреНрд░рд╕реНрддрд╛рд╡ рдХреЛ рдХрднреА Array.prototype.flat {рджрд╕, рдореИрдк} рдХреЗ рд░реВрдк рдореЗрдВ рдЬрд╛рдирд╛ рдЬрд╛рддрд╛ рдерд╛ред рдЗрд╕реЗ рд╕реНрдЯреЗрдЬ рдХрд╛ рджрд░реНрдЬрд╛ рдкреНрд░рд╛рдкреНрдд рд╣реИред 3 TC39 рдХреЗ 4 рдЕрд░реНрдерд╛рддреН рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЙрдореНрдореАрджрд╡рд╛рд░ рд╕рдорд╛рдкреНрдд рд╣реЛ рдЧрдпрд╛ред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдереЛрдбрд╝рд╛ рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╣реИ рдФрд░ рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░реЗрдВ TC39 рдФрд░ рдорд╛рдирдХреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ, рдЬреЛ рдкрд░рд┐рдЪрд┐рдд рд╣реИрдВ рд╡реЗ рдЗрд╕ рд╡рд╛рдкрд╕реА рдХреЛ рдЫреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред рддреЛ:


рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдорд╛рдирдХреЛрдВ рдФрд░ рдпрд╣ рдХреИрд╕реЗ рддреИрдпрд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред


ECMAScript


рдИрд╕реАрдПрдордПрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдПрдХ рдорд╛рдирдХ рд╣реИ рдЬрд┐рд╕реЗ рдИрд╕реАрдПрдордП рдЗрдВрдЯрд░рдиреЗрд╢рдирд▓ рджреНрд╡рд╛рд░рд╛ рд╡рд┐рдХрд╕рд┐рдд рдФрд░ рд░рдЦрд░рдЦрд╛рд╡ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рдПрдХреНрдорд╛ рдорд╣рд╛рд╕рднрд╛ рджреНрд╡рд╛рд░рд╛ рдЬреВрди 1997 рдореЗрдВ рдЕрдкрдирд╛рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдЕрдзрд┐рдХ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, ECMAScript ECMA-262 рдорд╛рдирдХ рд╣реИ рдЬрд┐рд╕реЗ ECMAScript рднрд╛рд╖рд╛ рд╡рд┐рдирд┐рд░реНрджреЗрд╢ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рдорд╛рдирдХ Netscape рдФрд░ Microsoft JScript рджреБрднрд╛рд╖рд┐рдпрд╛ рд╕реЗ Brendan Aich рджреНрд╡рд╛рд░рд╛ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рдореВрд▓ рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рдерд╛, рд▓реЗрдХрд┐рди рддрдм рд╕реЗ рдХрд╛рдлреА рд╡рд┐рдХрд╕рд┐рдд рд╣реБрдЖ рд╣реИред


рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ ECMAScript рд╡рд┐рдирд┐рд░реНрджреЗрд╢рди рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╣реИред рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рд╣реИ рдХрд┐ рдЬреИрд╕рд╛ рдХрд┐ рд╡рд┐рдирд┐рд░реНрджреЗрд╢рди рдореЗрдВ рдирдП рдбреНрд░рд╛рдлреНрдЯ рдпрд╛ рдкреНрд░рдХрд╛рд╢рд┐рдд рд╕рдВрд╕реНрдХрд░рдг рд╣реИрдВ, рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдФрд░ рдлреНрд░реЗрдорд╡рд░реНрдХ рдЬреИрд╕реЗ Node.js рдХреЗ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЛ рд▓рдЧрд╛рддрд╛рд░ рдЕрдкрдиреА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЙрди рдЗрдВрдЬрдиреЛрдВ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ рдЬреЛ рдпреЗ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдФрд░ рдЪреМрдЦрдЯреЗ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛрдб рдХреА рд╡реНрдпрд╛рдЦреНрдпрд╛ рдФрд░ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред


рдЖрдкрдХреЛ рдПрдХ рд╡рд┐рдирд┐рд░реНрджреЗрд╢ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреНрдпреЛрдВ рд╣реИ? рд╡рд┐рднрд┐рдиреНрди рдмреНрд░рд╛рдЙрдЬрд╝рд░реНрд╕ рд╡рд┐рднрд┐рдиреНрди рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЗрдВрдЬрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдХреНрд░реЛрдо рдореЗрдВ V8, рдлрд╝рд╛рдпрд░рдлрд╝реЙрдХреНрд╕ рдореЗрдВ рд╕реНрдкрд╛рдЗрдбрд░рдореЛрдВрдХреА рдФрд░ рдЗрд╕реА рддрд░рд╣ред рдЬрдм рдЖрдк рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рд▓рд┐рдЦрддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдЕрдкреЗрдХреНрд╖рд╛ рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рд╕рднреА рд╡рд╛рддрд╛рд╡рд░рдгреЛрдВ рдореЗрдВ рд╕рднреА рдЗрдВрдЬрди рдЖрдкрдХреЗ рдХреЛрдб рдХреЛ рдкрд╛рд░реНрд╕ рдФрд░ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░реЗрдВред рдПрдХ рдорд╛рдирдХреАрдХреГрдд рд╡рд┐рдирд┐рд░реНрджреЗрд╢ рдХреЗ рдмрд┐рдирд╛, рдЗрдирдореЗрдВ рд╕реЗ рдХреЛрдИ рднреА рдЗрдВрдЬрди рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрд╡рддрдВрддреНрд░ рд╣реЛрдЧрд╛ рдХреНрдпреЛрдВрдХрд┐ рд╡рд╣ рдкреНрд░рд╕рдиреНрди рд╣реЛрддрд╛ рд╣реИ, рдЬрд╛рд╣рд┐рд░ рд╣реИ рдХрд┐ рдпрд╣ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рдирд╣реАрдВ рд╣реИред


TC39


рдПрдХреНрдорд╛ рдЗрдВрдЯрд░рдиреЗрд╢рдирд▓ рдЯреЗрдХреНрдирд┐рдХрд▓ рдХрдореЗрдЯреА 39 (рдЙрд░реНрдл рдЯреАрд╕реА 39 ) рдмрд╣реБрдд рд╕реНрдорд╛рд░реНрдЯ рд▓реЛрдЧреЛрдВ рдХреА рдПрдХ рдХрдореЗрдЯреА рд╣реИ, рдпрд╣ рдкреНрд░рддрд┐рднрд╛рдЧрд┐рдпреЛрдВ рдХреЗ рд╕рдореВрд╣ рдХреЗ рд╕рд╛рде рдЬреБрдбрд╝рд╛ рд╣реБрдЖ рд╣реИ, рд╡реИрд╕реЗ рд╕реНрдорд╛рд░реНрдЯ рднреАред рд╡реЗ рд╕рднреА рд▓рдЧрднрдЧ рджреЛ рдорд╣реАрдиреЛрдВ рдореЗрдВ рд╕рдорд┐рддрд┐ рдХреА рдмреИрдардХреЛрдВ рдореЗрдВ рдПрдХ рд╕рд╛рде рдЗрдХрдЯреНрдард╛ рд╣реЛрддреЗ рд╣реИрдВ рдФрд░ рдореБрджреНрджреЛрдВ рдХреА рдкреВрд░реНрд╡-рддреИрдпрд╛рд░ рд╕реВрдЪреА рдкрд░ рдЪрд░реНрдЪрд╛ рдХрд░рддреЗ рд╣реИрдВред
TC39 рдХрд╛ рд▓рдХреНрд╖реНрдп рдЪрд░реНрдЪрд╛ рдФрд░ рдЖрдо рд╕рд╣рдорддрд┐ рдХреЗ рдмрд╛рдж рдкрд╣рд▓реЗ рд╕реЗ рдЙрд▓реНрд▓реЗрдЦрд┐рдд ECMAScript рд╡рд┐рдирд┐рд░реНрджреЗрд╢ рдХреЛ рдмрдирд╛рдП рд░рдЦрдирд╛ рдФрд░ рдЕрджреНрдпрддрди рдХрд░рдирд╛ рд╣реИред рдЗрд╕рдореЗрдВ рднрд╛рд╖рд╛ рд╕рд┐рдВрдЯреИрдХреНрд╕, рд╢рдмреНрджрд╛рд░реНрде, рдкреБрд╕реНрддрдХрд╛рд▓рдп рдФрд░ рд╕рдВрдмрдВрдзрд┐рдд рддрдХрдиреАрдХ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ рдЬреЛ рднрд╛рд╖рд╛ рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реИрдВред


рдпрд╣ рдкреНрд░рдХреНрд░рд┐рдпрд╛ TC39 рджреНрд╡рд╛рд░рд╛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХреА рдЧрдИ рд╣реИред рдпрд╣ рд╕рдм рдПрдХ рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдХреЗ рдорд╕реМрджреЗ рд╕реЗ рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИ рдЬреЛ рд╡рд┐рдирд┐рд░реНрджреЗрд╢ рдХреЛ рдмрдврд╝рд╛рддрд╛ рд╣реИ рдпрд╛ рдмрджрд▓рддрд╛ рд╣реИред рдпреЗ рдбреНрд░рд╛рдлреНрдЯ рдЕрдХреНрд╕рд░ рдбреЗрд╡рд▓рдкрд░ рд╕рдореБрджрд╛рдпреЛрдВ рд╕реЗ рдпрд╛ рдЦреБрдж TC39 рд╕рджрд╕реНрдпреЛрдВ рд╕реЗ рдЖрддреЗ рд╣реИрдВред рдпрджрд┐ рдкреНрд░рд╕реНрддрд╛рд╡ рдпреЛрдЧреНрдп рд╣реИ, рддреЛ рдорд╕реМрджреЗ рдХреЛ рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рдкреНрд░рд╕реНрддрд╛рд╡ рдХрд╛ рджрд░реНрдЬрд╛ рдорд┐рд▓ рдЬрд╛рддрд╛ рд╣реИред


рдлрд┐рд░, рд╡рд┐рдЪрд╛рд░ рд╕реЗ рдкреНрд░рдХрд╛рд╢рди рдХреЗ рд░рд╛рд╕реНрддреЗ рдкрд░, рдкреНрд░рд╕реНрддрд╛рд╡ рдХрдИ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЪрд░рдгреЛрдВ рд╕реЗ рдЧреБрдЬрд░рддрд╛ рд╣реИред рдЙрдиреНрд╣реЗрдВ рд╢реВрдиреНрдп рд╕реЗ рдЪрд╛рд░ рдкреБрд░реБрд╖ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдореЗрдВ рдЧрд┐рдирд╛ рдЬрд╛рддрд╛ рд╣реИ:


[тАЬStrawmanтАЭ, тАЬProposalтАЭ, тАЬDraftтАЭ, тАЬCandidatтАЭ, тАЬFinishedтАЭ] 

рдХрд┐рд╕реА рднреА рдЕрдЧрд▓реЗ рдЪрд░рдг рдкрд░ рдЬрд╛рдиреЗ рдХреЗ рд▓рд┐рдП TC39 рдЕрдиреБрдореЛрджрди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдпрджрд┐ рдкреНрд░рд╕реНрддрд╛рд╡ рдЪрд░рдг 4 рддрдХ рдкрд╣реБрдВрдЪ рдЧрдпрд╛ рд╣реИ, рддреЛ рдпрд╣ рдЙрдореНрдореАрдж рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИ рдХрд┐ рдпрд╣ ECMA-262 рдорд╛рдирдХ рдХреЗ рд╡рд┐рдирд┐рд░реНрджреЗрд╢ рдХреЗ рдЕрдЧрд▓реЗ рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рддреМрд░ рдкрд░ рдкреНрд░рдХрд╛рд╢рд┐рдд рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдФрд░ рдЕрдВрддрддрдГ рдпрд╣ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЪрд▓рд╛рдиреЗ рд╡рд╛рд▓реЗ рд╡рд╛рддрд╛рд╡рд░рдг рдореЗрдВ рджрд┐рдЦрд╛рдИ рджреЗрдЧрд╛ред рдЖрдк рдЗрд╕ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рд╕реЗ рд╣реА рдЬрд╛рди рд╕рдХрддреЗ рд╣реИрдВред


рдорд╛рдирдХ рдХреЗ рд▓рд┐рдП рдкрд░рд┐рдЪрдп рдХреЗ рд╕рднреА рдореМрдЬреВрджрд╛ рдкреНрд░рд╕реНрддрд╛рд╡реЛрдВ рдХреЛ рдЬреАрдердм рдкрд░ рдпрд╣рд╛рдВ рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ
рдЦреИрд░, рдЕрдм рдЖрдЧреЗ рдЪрд▓рддреЗ рд╣реИрдВ ...


Array.prototype.flat


рдлреНрд▓реИрдЯ () рд╡рд┐рдзрд┐ рдПрдХ рдирдИ рд╕рд░рдгреА рд▓реМрдЯрд╛рддреА рд╣реИ,


 var newArray = arr.flat(depth); 

рдЬрд┐рд╕рдореЗрдВ рд╕рднреА рддрддреНрд╡реЛрдВ рдХреЛ рд╕рд░рдгрд┐рдпреЛрдВ рдХреЗ рддрд╣рдд рдШреЛрдВрд╕рд▓рд╛ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рдерд╛, рдЙрдиреНрд╣реЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдЧрд╣рд░рд╛рдИ рд╕реНрддрд░ рддрдХ "рдмрдврд╝рд╛" рджрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред


рдПрдХ рдЙрджрд╛рд╣рд░рдг:


 const arr1 = [1, 2, [3, 4]]; arr1.flat(); //? [1, 2, 3, 4] const arr2 = [1, 2, [3, 4, [5, 6]]]; arr2.flat(); //? [1, 2, 3, 4, [5, 6]] const arr3 = [1, 2, [3, 4, [5, 6]]]; arr3.flat(2); //? [1, 2, 3, 4, 5, 6] 

рдПрдХ рд╕рд╛рдЗрдб рдЗрдлреЗрдХреНрдЯ рднреА рд╣реИ, рдпрд╣ рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рд╕рд░рдгреА рддрддреНрд╡реЛрдВ рдХреЛ рдирд┐рдХрд╛рд▓рддрд╛ рд╣реИ


рдПрдХ рдЙрджрд╛рд╣рд░рдг:


 const arr4 = [1, 2, , 4, 5]; arr4.flat(); //? [1, 2, 4, 5] 

рд╢реАрд░реНрд╖рд╛рд╕рди рд╕реНрд╡рдпрдВ рдХрд░реЗрдВ


рд╣рдо рдХрдо рдФрд░ рд╕рдорддрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ


рдПрдХ рдЙрджрд╛рд╣рд░рдг:


 const arr1 = [1,2,3,[1,2,3,4, [2,3,4]]]; function flattenDeep(arr1) { return arr1.reduce((acc, val) => Array.isArray(val) ? acc.concat(flattenDeep(val)) : acc.concat(val), []); } flattenDeep(arr1); //? [1, 2, 3, 1, 2, 3, 4, 2, 3, 4] 

Array.prototype.flatMap



рдлреНрд▓реИрдЯрдкрд╛рдЗрдк () рд╡рд┐рдзрд┐ рдкрд╣рд▓реЗ рдкреНрд░рддреНрдпреЗрдХ рддрддреНрд╡ рдХреЗ рд▓рд┐рдП рдПрдХ рдлрд╝рдВрдХреНрд╢рди рд▓рд╛рдЧреВ рдХрд░рддреА рд╣реИ, рдФрд░ рдлрд┐рд░ рдкрд░рд┐рдгрд╛рдо рдХреЛ рдПрдХ рдлреНрд▓реИрдЯ рд╕рдВрд░рдЪрдирд╛ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рддреА рд╣реИ рдФрд░ рдЗрд╕реЗ рдПрдХ рдирдП рд╕рд░рдгреА рдореЗрдВ рд░рдЦрддреА рд╣реИред рдпрд╣ рдорд╛рдирдЪрд┐рддреНрд░ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд╕рдорд╛рди рд╣реИ, рдЗрд╕рдХреЗ рдмрд╛рдж рдлреНрд▓реИрдЯ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ 1 рдХреЗ рдЧрд╣рд░рд╛рдИ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд╕рд╛рде рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдлреНрд▓реИрдЯ рдореИрдк рдЕрдХреНрд╕рд░ рдЙрдкрдпреЛрдЧреА рд╣реЛрддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдереЛрдбрд╝реА рдЕрдзрд┐рдХ рдХреБрд╢рд▓рддрд╛ рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред


 var new_array = arr.flatMap(function callback(currentValue[, index[, array]]) { // return element for new_array }[, thisArg]) 

callback - рдПрдХ рдирдпрд╛ рд╕рд░рдгреА рдХреЗ рддрддреНрд╡реЛрдВ рдХрд╛ рдЙрддреНрдкрд╛рджрди рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рддреАрди рддрд░реНрдХ рд▓реЗрддрд╛ рд╣реИ:


  1. currentValue - рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд░рдгреА рдХрд╛ рд╡рд░реНрддрдорд╛рди рддрддреНрд╡ред
  2. index (рд╡реИрдХрд▓реНрдкрд┐рдХ) - рд╕рд░рдгреА рдореЗрдВ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдЗрдЯрдо рдХрд╛ рд╕реВрдЪрдХрд╛рдВрдХред
  3. array (рд╡реИрдХрд▓реНрдкрд┐рдХ) - array to traverseред
    thisArg (рд╡реИрдХрд▓реНрдкрд┐рдХ) - рдХреЙрд▓рдмреИрдХ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░рддреЗ рд╕рдордп рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдиреЗ рд╡рд╛рд▓рд╛ рдорд╛рдиред
    рд╡рд╛рдкрд╕реА рдореВрд▓реНрдп - рдПрдХ рдирдпрд╛ рд╕рд░рдгреА, рдЬрд┐рд╕рдХрд╛ рдкреНрд░рддреНрдпреЗрдХ рддрддреНрд╡ рдХреЙрд▓рдмреИрдХ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдкрд░рд┐рдгрд╛рдо рд╣реИ рдФрд░ рд╕реНрддрд░ 1 рдХреЗ рд▓рд┐рдП "рдмрдврд╝рд╛" рд╣реИред

рдЙрджрд╛рд╣рд░рдг:


 [ { x: 1, y: 2 }, { x: 3, y: 4 }, { x: 5, y: 6 } ].flatMap(c => [cx, cy]) //? [1, 2, 3, 4, 5, 6] // or const orders = [ { orderId: 42, items: [ {name: 'soap', price: 1.99}, {name: 'shampoo', price: 4.99} ] }, { orderId: 1337, items: [ {name: 'toothpaste', price: 5.59}, {name: 'toothbrush', price: 8.99} ] } ]; orders.flatMap(i => i.items.map(i => i.name)); //? ["soap", "shampoo", "toothpaste", "toothbrush"] 

рд╢реАрд░реНрд╖рд╛рд╕рди рд╕реНрд╡рдпрдВ рдХрд░реЗрдВ


 var arr1 = [1, 2, 3, 4]; arr1.reduce((acc, x) => acc.concat([x * 2]), []); // [2, 4, 6, 8] 

рдирд┐рд╖реНрдХрд░реНрд╖


рдпрд╛рдж рд░рдЦреЗрдВ рдХрд┐ рдпрд╣ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рднрд╛рд╖рд╛ рдореЗрдВ рдПрдХ рдХрд╛рд░рдг рд╕реЗ рдЬреЛрдбрд╝реА рдЬрд╛рддреА рд╣реИред TC39 рдХреЗ рд╕реНрдорд╛рд░реНрдЯ рд▓реЛрдЧ рдЗрд╕рдХрд╛ рдХрд╛рд░рдг рднрд╛рд╖рд╛ рдХреА рдЧреБрдгрд╡рддреНрддрд╛, рдЕрдореВрд░реНрддрддрд╛, рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдФрд░ рдЕрдиреНрдп рд╕реБрдзрд╛рд░ рдХрд░ рд░рд╣реЗ рд╣реИрдВред рдЗрди рдирд╡рд╛рдЪрд╛рд░реЛрдВ рдХреЛ рдкрд╣рд▓реЗ рд╕реЗ рд╕реАрдЦреЗрдВ, рдФрд░ рдЬрдм рддрдХ рд╡реЗ рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рддреМрд░ рдкрд░ рд╣рд░ рдЬрдЧрд╣ рдкреНрд░рдХрд╛рд╢рд┐рдд рдФрд░ рд╕рдорд░реНрдерд┐рдд рдирд╣реАрдВ рд╣реЛ рдЬрд╛рддреЗ, рддрдм рддрдХ рдЖрдк рдмрд┐рдирд╛ рд╕рдордп рдмрд░реНрдмрд╛рдж рдХрд┐рдП рддреБрд░рдВрдд рдХрд╛рдо рдкрд░ рдЖ рд╕рдХрддреЗ рд╣реИрдВред рдЖрдк рдЕрдкрдиреЗ рд╕рдВрдЧрдарди рдореЗрдВ рдЕрдкрдиреЗ рдЖрдк рдХреЛ рдПрдХ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╡рд┐рд╢реЗрд╖рдЬреНрдЮ рдХреЗ рд░реВрдк рдореЗрдВ рднреА рд╕реНрдерд╛рди рджреЗ рд╕рдХрддреЗ рд╣реИрдВ, рдирдИ рднрд╛рд╖рд╛ рдХреА рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реИрдВ рдЬреЛ рдХреЛрдб рдФрд░ рдЙрддреНрдкрд╛рдж рджреЛрдиреЛрдВ рдХреЛ рд╣реА рдмреЗрд╣рддрд░ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВред


ps: рдЬрдмрдХрд┐ рд▓реЗрдЦ рд▓рд┐рдЦрд╛ рдЬрд╛ рд░рд╣рд╛ рдерд╛ :), рдкреНрд░рд╕реНрддрд╛рд╡ рдЪрд░рдг 4 рдореЗрдВ рдЪрд▓рд╛ рдЧрдпрд╛
Array.prototype.{flat,flatMap} рд╕реЗ рдЪрд░рдг 4 рддрдХ, 2019.01.29 TC39 рдкреНрд░рддрд┐

Source: https://habr.com/ru/post/hi433820/


All Articles