рд╕рдирд╕рдиреАрдЦреЗрдЬ рдиреЛрдЯ рдкрд░
рдХрдореЗрдВрдЯреНрд░реА рдореЗрдВ рдпреИрдВрдбреЗрдХреНрд╕ рдкрд░ "рд░реЛрдЬрдЧрд╛рд░" рдХреА рдЕрдкрдиреА рдХрд╣рд╛рдиреА рдХреЛ рд╕реЗрдЯ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рдореИрдВрдиреЗ "рдХреИрд╕реЗ рдореИрдВрдиреЗ Y. рдорд╛рд░реНрдХреЗрдЯ рдореЗрдВ 3 рдорд╣реАрдиреЗ рдХрд╛рдо рдХрд┐рдпрд╛ рдФрд░ рдЫреЛрдбрд╝ рджрд┐рдпрд╛", рдпрд╣ рдореЗрд░реЗ рдпреИрдВрдбреЗрдХреНрд╕.рдореИрд╕реЗрдЬ рдЕрдиреБрднрд╡ рд╕реЗ рдкреНрд░рд╛рдкреНрдд рд▓рд╛рдн рдХреЛ рдЫреБрдкрд╛рдирд╛ рдЕрдиреБрдЪрд┐рдд рд╣реЛрдЧрд╛ред
рдореЗрд░реА рдиреМрдХрд░реА рдХреА рдЬрд┐рдореНрдореЗрджрд╛рд░рд┐рдпреЛрдВ рдореЗрдВ рдлреБрд▓рд╕реНрдЯреИрдХ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ / рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдбреЗрд╡рд▓рдкрд░ рд╕реНрдерд┐рддрд┐ рдХреЗ рд▓рд┐рдП рдЙрдореНрдореАрджрд╡рд╛рд░реЛрдВ рдХрд╛ рддрдХрдиреАрдХреА рд╕рд╛рдХреНрд╖рд╛рддреНрдХрд╛рд░ рд╢рд╛рдорд┐рд▓ рд╣реИ, рдореИрдВ рдЗрд╕ рд╡реНрдпрд╡рд╕рд╛рдп рдореЗрдВ рд╕рдХреНрд░рд┐рдп рд░реВрдк рд╕реЗ рд╢рд╛рдорд┐рд▓ рд░рд╣рд╛ рд╣реВрдВ (рдХреНрдпрд╛ рдпрд╣ рдХрд╣рдиреЗ рдпреЛрдЧреНрдп рд╣реИ рдХрд┐ рдореИрдВ рдереЛрдбрд╝рд╛ рддрдВрдЧ рдЖ рдЧрдпрд╛ рд╣реВрдВ?) рдПрдХ рд╕рд╛рд▓ рд╕реЗ рдЕрдзрд┐рдХ рд╕рдордп рд╕реЗ, рдореЗрд░реЗ рдкрд╛рд╕ 30 рд╕реЗ рдЕрдзрд┐рдХ рддрдХрдиреАрдХреА рд╕рд╛рдХреНрд╖рд╛рддреНрдХрд╛рд░ рд╣реИрдВред
рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ рдПрдХ рддрдХрдиреАрдХреА рд╕рд╛рдХреНрд╖рд╛рддреНрдХрд╛рд░ рдореЗрдВ, рдореИрдВрдиреЗ рдЙрдореНрдореАрджрд╡рд╛рд░ рд╕реЗ рдкреВрдЫрд╛ рдХрд┐ "рдХреНрдпрд╛ рдмрдВрдж рд╣реИ", "рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рдЗрдирд╣реЗрд░рд┐рдЯреЗрдВрд╕ рдХреИрд╕реЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ" рдЬреИрд╕реЗ рдмреЗрд╡рдХреВрдл рд╕рд╡рд╛рд▓ рдкреВрдЫреЗ, "рдпрд╣рд╛рдБ рдЗрд╕ рддрд░рд╣ рдХреЗ рд╕реВрдЪрдХрд╛рдВрдХ рдХреЗ рд╕рд╛рде рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рдПрдХ рдРрд╕реА рддрд╛рд▓рд┐рдХрд╛ рд╣реИ, рдХреГрдкрдпрд╛ рд╣рдореЗрдВ рдмрддрд╛рдПрдВ рдХрд┐ рдЖрдк рдЗрд╕ рддрд░рд╣ рдХреА рдЧрддрд┐ рдХреИрд╕реЗ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ" рдЕрдиреБрд░реЛрдз тАЭ, рдЬреЛ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЙрдиреНрд╣реЛрдВрдиреЗ рдЙрдореНрдореАрджрд╡рд╛рд░ рдХреА рдЗрдВрдЬреАрдирд┐рдпрд░рд┐рдВрдЧ рдХреНрд╖рдорддрд╛рдУрдВ рдХреА рдкрд╣рдЪрд╛рди рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХреА, рдЙрдиреНрд╣реЗрдВ рдпрд╣ рдирд┐рд╖реНрдХрд░реНрд╖ рдирд┐рдХрд╛рд▓рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рдереА рдХрд┐ рдХреЛрдИ рд╡реНрдпрдХреНрддрд┐ рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рдХрд┐рддрдиреА рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рд╣рд▓ рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдХрд┐рддрдиреА рдЬрд▓реНрджреА рд╡рд╣ рдПрдХ рдореМрдЬреВрджрд╛ рдХреЛрдб рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛ рд╕рдХрддрд╛ рд╣реИред рдХреНрдпрд╛ рдирд╣реАрдВ рд▓реЗрдХрд┐рди рджреБрдГрдЦрдж рдкрд░рд┐рдгрд╛рдо рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ ...
рд▓реЗрдХрд┐рди рдпреИрдВрдбреЗрдХреНрд╕ рдореЗрдВ рдЪрд╛рд░ рджреМрд░ рдХреЗ рддрдХрдиреАрдХреА рд╕рд╛рдХреНрд╖рд╛рддреНрдХрд╛рд░ рд╕реЗ рдЧреБрдЬрд░рдиреЗ рдХреЗ рдмрд╛рдж рд╕рдм рдХреБрдЫ рдмрджрд▓ рдЧрдпрд╛ред
рдЖрдорддреМрд░ рдкрд░, рдпреИрдВрдбреЗрдХреНрд╕ рд╕рд╛рдХреНрд╖рд╛рддреНрдХрд╛рд░рдХрд░реНрддрд╛рдУрдВ рдХреЗ рдмрдЧреАрдЪреЗ рдХреЗ рд▓рд┐рдП рдкрддреНрдерд░ рдЙрдбрд╝рддреЗ рд╣реИрдВ:
1. рдРрд╕реЗ рдХрд╛рд░реНрдп рдЬрд┐рдирдХрд╛ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рдореВрд▓реНрдп рдирд╣реАрдВ рд╣реИ;
2. рдПрдХ рдкреЗрдВрд╕рд┐рд▓ рдпрд╛ рдПрдХ рдмреНрд▓реИрдХрдмреЛрд░реНрдб рдкрд░ рдХрд╛рдЧрдЬ рдХреЗ рдЯреБрдХрдбрд╝реЛрдВ рдкрд░ рдЗрди рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ред
рдпрд╣ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА 2019 рд╣реИ рдФрд░ рдпрд╣ рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдирд░рдХ рдореЗрдВ рдмреЙрдпрд▓рд░ рдХрд╛рд╕реНрдЯрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрд▓рдЧ рдЙрддреНрдкрд╛рджрди рд▓рд╛рдЗрди рд╢реБрд░реВ рдХрд░рдиреЗ рдХрд╛ рд╕рдордп рд╣реИ, рдЬреЛ рд▓реЛрдЧреЛрдВ рдХреЛ рд╣рд╛рде рд╕реЗ рдкрд╛рда рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рдХрд░рддреЗ рд╣реИрдВ, рдХреЛрдб рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдирд╣реАрдВред рдкреНрд░рддреНрдпреЗрдХ рд╡реНрдпрдХреНрддрд┐ рдЕрд▓рдЧ-рдЕрд▓рдЧ рддрд░реАрдХреЛрдВ рд╕реЗ рд▓рд┐рдЦрддрд╛ рд╣реИ, рдФрд░ рдЗрд╕ рдиреЛрдЯ рдХреЗ рд▓рд┐рдП рдкрд╛рда рддреИрдпрд╛рд░ рдХрд░рдиреЗ рдореЗрдВ, рдореБрдЭреЗ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрдирд╛ рдкрдбрд╝рддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрд╣ рд╡рд┐рд╢реЗрд╖ рдкреИрд░рд╛рдЧреНрд░рд╛рдл рдЫрд╣ рдмрд╛рд░ - рдЕрдЧрд░ рдореИрдВрдиреЗ рдХрд╛рдЧрдЬрд╝ рдкрд░ рд╣реИрдмрд░ рдХреЗ рд▓рд┐рдП рдиреЛрдЯреНрд╕ рд▓рд┐рдЦреЗ, рддреЛ рдореИрдВ рд╣реИрдмрд░ рдХреЗ рд▓рд┐рдП рдиреЛрдЯреНрд╕ рдирд╣реАрдВ рд▓рд┐рдЦреВрдВрдЧрд╛ред
рд▓реЗрдХрд┐рди рдореИрдВ рдпрд╛рдВрдбреЗрдХреНрд╕ рдХрд╛рд░реНрдпреЛрдВ рдХреА рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рдирд┐рд░рд░реНрдердХрддрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдереАрд╕рд┐рд╕ рд╕реЗ рд╕рд╣рдордд рдирд╣реАрдВ рд╣реВрдВред рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рджрд┐рдирдЪрд░реНрдпрд╛ рдХрд╛ рд╡рд┐рдХрд╛рд╕ рднреА рдирд╣реАрдВ рд╣реИ, рдирд╣реАрдВ, рд▓реЗрдХрд┐рди рдпрд╣ рдЖрдкрдХреЛ рдПрдХ рдХрд╛рд░реНрдп рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░реЗрдЧрд╛ рдЬрд┐рд╕рдореЗрдВ рдХрдИ рд╕рдорд╛рдзрд╛рди рд╣реИрдВред рдЖрдкрдХреЛ рд▓рдВрдмреЗ рд╕рдордп рддрдХ рдПрдХ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪрдиреЗ рдХреА рдЬрд╝рд░реВрд░рдд рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдХреЛрдб рдЖрдХрд╛рд░, рдкреНрд░рджрд░реНрд╢рди рдпрд╛ рдЕрднрд┐рд╡реНрдпрдВрдЬрдХрддрд╛ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдЗрд╖реНрдЯрддрдо рдирд╣реАрдВ рд╣реИред рдЕрдиреНрдп рд╕рд┐рд░реНрдл рд╡рд┐рдкрд░реАрдд рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕рдХреЗ рд▓рд┐рдП рдХреБрд╢рд▓ рдФрд░ рд╕рдордЭрдиреЗ рдпреЛрдЧреНрдп рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХреЗ рдирд┐рд░реНрдорд╛рдг рдореЗрдВ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХреЛ рдХреБрдЫ рдЕрдиреБрднрд╡ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдпрд╣рд╛рдБ рдПрдХ рд╕рд╛рдХреНрд╖рд╛рддреНрдХрд╛рд░ рд╕реЗ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИ:
getRanges([0, 1, 2, 3, 4, 7, 8, 10])
рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдкрд░, рдореИрдВ рдЧрдВрднреАрд░ рд░реВрдк рд╕реЗ рднрдбрд╝рдХ рдЧрдпрд╛, рдФрд░ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ рдХрд┐ рдпрд╣ рд╕рдмрд╕реЗ рд╕реБрдВрджрд░ рддрд░реАрдХрд╛ рдирд╣реАрдВ рд╣реИред рд╕рдорд╛рдзрд╛рди, рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рд╕рдВрд░рдХреНрд╖рд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореИрдВ рд╣рдорд╛рд░реЗ рдЙрдореНрдореАрджрд╡рд╛рд░реЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдХреЛ рд╕рдорд╛рдзрд╛рди рджреВрдВрдЧрд╛:
function getRanges(arr: number[]) { return arr.map((v, k) => { if (v - 1 === arr[k - 1]) { if (arr[k + 1] === v + 1) { return '' } else { return `-${v},` } } else { return v + ',' } }).join('').split(',-').join('-') }
Minuses рдХреЗ: рдПрдХ рдЧреИрд░-рдЕрдиреБрдХреНрд░рдорд┐рдд рд╕реВрдЪрдХрд╛рдВрдХ рдФрд░ рдмрджрд╕реВрд░рдд рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╣реЗрд░рдлреЗрд░ рдореЗрдВ рд╕рд░рдгреА рддрдХ рдкрд╣реБрдВрдЪрдирд╛: рдЬреНрд╡рд╛рдЗрди-рд╕реНрдкреНрд▓рд┐рдЯ-рдЬреЙрдЗрдиред рдФрд░ рдпрд╣ рд╕рдорд╛рдзрд╛рди рднреА рдЧрд▓рдд рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд╕рд╛рде getRanges ([1, 2, 3, 5, 6, 8]) "1-3,5-6,8," рд╡рд╛рдкрд╕ рдЖ рдЧрдпрд╛ рд╣реИ, рдФрд░ рдЕрдВрдд рдореЗрдВ рдХреЙрдорд╛ рдХреЛ "рдорд╛рд░рдиреЗ" рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рддрд░реНрдХ рдХреЛ рдЬрдЯрд┐рд▓ рдХрд░рдХреЗ рдФрд░ рдкрдардиреАрдпрддрд╛ рдХреЛ рдХрдо рдХрд░рдХреЗ рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдХреЛ рдФрд░ рдмрдврд╝рд╛рдиреЗ рдХреЗ рд▓рд┐рдПред
рдпрд╣рд╛рдБ рдПрдХ Yandex- рд╢реИрд▓реА рд╕рдорд╛рдзрд╛рди рд╣реИ:
const getRanges = arr => arr .reduceRight((r, e) => r.length ? (r[0][0] === e + 1 ? r[0].unshift(e) : r.unshift([e])) && r : [[e]], []) .map(a => a.join('-')).join(',')
рдХреНрдпрд╛ рдЧреВрдЧрд▓ рдРрд╕реЗ рд╕реБрд░реБрдЪрд┐рдкреВрд░реНрдг рд╕рдорд╛рдзрд╛рди рд▓рд┐рдЦрдиреЗ рдореЗрдВ рдорджрдж рдХрд░реЗрдЧрд╛? рдЗрд╕ рддрд░рд╣ рдХреЗ рдХреЛрдб рдХрд╛ рдЙрддреНрдкрд╛рджрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рджреЛ рдШрдЯрдХреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ: рдХрдИ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдФрд░ рднрд╛рд╖рд╛ рдХреЗ рдЙрддреНрдХреГрд╖реНрдЯ рдЬреНрдЮрд╛рди рдХреЗ рд╕рд╛рде рдЕрдиреБрднрд╡ред рдФрд░ рдпрд╣ рд╡рд╣реА рд╣реИ рдЬреЛ рдпреИрдВрдбреЗрдХреНрд╕ рднрд░реНрддреА рдХрд░рдиреЗ рд╡рд╛рд▓реЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЪреЗрддрд╛рд╡рдиреА рджреЗрддрд╛ рд╣реИ: рд╡реЗ рдЖрдкрд╕реЗ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдФрд░ рднрд╛рд╖рд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкреВрдЫреЗрдВрдЧреЗред рдпрд╛рдВрдбреЗрдХреНрд╕ рдЙрди рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЛ рдирд┐рдпреБрдХреНрдд рдХрд░рдирд╛ рдкрд╕рдВрдж рдХрд░рддрд╛ рд╣реИ рдЬреЛ рд╢рд╛рдВрдд рдХреЛрдб рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВред рдРрд╕реЗ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдкреНрд░рднрд╛рд╡реА рд╣реЛрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди, рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг, рд╡рд┐рдирд┐рдореЗрдп: рд╡реЗ рдПрдХ рд╣реА рд╕рдорд╛рдзрд╛рди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд▓рд┐рдЦреЗрдВрдЧреЗред рдПрдХ рдХрд╛рдо рдкрд░ рдХрдо рд╕реИрджреНрдзрд╛рдВрддрд┐рдХ рд░реВрдк рд╕реЗ рд╕рдордЭ рд░рдЦрдиреЗ рд╡рд╛рд▓реЗ рдбреЗрд╡рд▓рдкрд░реНрд╕ рджрд░реНрдЬрдиреЛрдВ рд╡рд┐рд╡рд┐рдз, рдХрднреА-рдХрднреА рдмрд╕ рдЕрджреНрднреБрдд рд╕рдорд╛рдзрд╛рди рджреЗрдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрддреЗ рд╣реИрдВ: рд╣рдорд╛рд░реА рд░рд┐рдХреНрддрд┐ рдХреЗ рд▓рд┐рдП рдЙрдореНрдореАрджрд╡рд╛рд░реЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдиреЗ рдРрд╕реА рдмреИрд╕рд╛рдЦреА рд▓рдкреЗрдЯреА рдХрд┐ рдореЗрд░реА рдЖрдБрдЦреЗрдВ рдореЗрд░реЗ рдорд╛рдереЗ рдкрд░ рд▓рдЧ рдЧрдИрдВред
UPD: рдЬреИрд╕рд╛ рдХрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛
MaxVetrov рдиреЗ рдХрд╣рд╛ , рдореЗрд░рд╛ рд╕рдорд╛рдзрд╛рди рдЧрд▓рдд рд╣реИ:
getRanges([1,2,3,4,6,7])
рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдореИрдВ рд╕реНрд╡рдпрдВ рдЕрднреА рддрдХ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рдареАрдХ рд╕реЗ рд╣рд▓ рдирд╣реАрдВ рдХрд░ рдкрд╛рдпрд╛ рд╣реВрдВред
UPD2: рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдиреЗ рдореБрдЭреЗ рдЖрд╢реНрд╡рд╕реНрдд рдХрд┐рдпрд╛ рдХрд┐ рдпрд╣ рдХреЛрдб рдЦрд░рд╛рдм рдирд┐рдХрд▓рд╛, рднрд▓реЗ рд╣реА рдпрд╣ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдХрд╛рдо рдХрд┐рдпрд╛ рд╣реЛред
рдпрд╣ рд╡реНрдпрд░реНрде рдирд╣реАрдВ рдерд╛ рдХрд┐ рдореИрдВрдиреЗ рдпреИрдВрдбреЗрдХреНрд╕ рдХрд╛рд░реНрдпрд╛рд▓рдп рдореЗрдВ рдкреЗрдкрд░ рдХрд╛ рдЕрдиреБрд╡рд╛рдж рдХрд░рдиреЗ рдореЗрдВ рд╕рдордп рдмрд┐рддрд╛рдпрд╛, рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕ рдкрд╛рда рдХреЗ рджреМрд░рд╛рди рдореИрдВ рд╕рдордЭ рдЧрдпрд╛ рдХрд┐ рдХреИрд╕реЗ рдореИрдВ рдПрдХ рдкреНрд░рднрд╛рд╡реА рд╕рд╛рдХреНрд╖рд╛рддреНрдХрд╛рд░рдХрд░реНрддрд╛ рдмрди рд╕рдХрддрд╛ рд╣реВрдВред рдореИрдВрдиреЗ рдЖрдзрд╛рд░ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдирдХреЗ рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рд╡рд┐рдЪрд╛рд░ рдФрд░ рдкреНрд░рд╛рд░реВрдк рд▓рд┐рдпрд╛, рд▓реЗрдХрд┐рди:
- рдореИрдВрдиреЗ рдХрд╛рдЧрдЬ рдкрд░ рдХреЛрдб рд▓рд┐рдЦрдиреЗ рдХреА рдкреЗрд╢рдХрд╢ рдирд╣реАрдВ рдХреА, рд▓реЗрдХрд┐рди code.yandex-team.ru рдореЗрдВ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣рд╛ред рдпрд╣ рдПрдХ рдмрд╣реБ-рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдСрдирд▓рд╛рдЗрди рдХреЛрдб рд╕рдВрдкрд╛рджрдХ рд╣реИ, рдЬрд┐рд╕рдХреЗ рдирд┐рд╖реНрдкрд╛рджрди рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдХреЗ рдмрд┐рдирд╛ред рд╢рд╛рдпрдж рдПрдХ рдФрд░, рдЕрдзрд┐рдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╡рд┐рдХрд▓реНрдк рд╣реИ, рд▓реЗрдХрд┐рди рдПрдХ рдЦреЛрдЬ рдереА рдФрд░ рдЖрд▓рд╕реНрдп рдмрд╛рдХреА рдерд╛;
- рдЙрд╕реЗ рдПрдХ рдЖрджрд░реНрд╢ рд╕рдорд╛рдзрд╛рди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рдереА, рд▓реЗрдХрд┐рди рдЗрд╕реЗ рдХрд┐рд╕реА рддрд░рд╣ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣рд╛ рдЧрдпрд╛;
- рдЙрд╕реЗ рд╣реГрджрдп рд╕реЗ рднрд╛рд╖рд╛ рдХреЗ рдЬреНрдЮрд╛рди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рдереА, рд╡рд╛рдВрдЫрд┐рдд рдХрд╛рд░реНрдп рдпрд╛ рд╡рд┐рдзрд┐ рдкреВрдЫреА рдЬрд╛ рд╕рдХрддреА рдереА;
- рдЙрдиреНрд╣реЛрдВрдиреЗ рддрдХрдиреАрдХреА рд╕рд╛рдХреНрд╖рд╛рддреНрдХрд╛рд░ рдХреЗ рд▓рд┐рдП рд╕рдордп 30 рдорд┐рдирдЯ рддрдХ рдШрдЯрд╛ рджрд┐рдпрд╛ред
рд╣рдорд╛рд░реЗ рддрдХрдиреАрдХреА рд╕рд╛рдХреНрд╖рд╛рддреНрдХрд╛рд░ рдХреЗ рдЙрджреНрджреЗрд╢реНрдпреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ:
let n = 0 while (++n < 5) { setTimeout(() => console.log(n), 10 + n) }
рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдбреЗрд╡рд▓рдкрд░ рдХреЗ рд▓рд┐рдП рдПрдХ рдмрд╣реБрдд рд╣реА рдорд╣рддреНрд╡рдкреВрд░реНрдг рдкрд░реАрдХреНрд╖рд╛ рд╣реИред рдФрд░ рдпрд╣рд╛рдБ рдмрд┐рдВрджреБ рдкреВрд░реНрд╡рдЧрд╛рдореАрддрд╛ рдФрд░ рдЙрддреНрддрд░рдкрдж рдХреЗ рдмреАрдЪ рдХреЗ рдЕрдВрддрд░реЛрдВ рдХреЛ рдмрдВрдж рдХрд░рдиреЗ рдФрд░ рд╕рдордЭрдиреЗ рдХреА рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдХрд┐ рдХреБрдЫ рдЕрдХрдердиреАрдп рдХрд╛рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ рдЪреМрдерд╛рдИ рд╕рд╛рдХреНрд╖рд╛рддреНрдХрд╛рд░рдХрд░реНрддрд╛рдУрдВ рдХрд╛ рдорд╛рдирдирд╛ тАЛтАЛрд╣реИ рдХрд┐ рдЪрдХреНрд░ рд╕рдорд╛рдкреНрдд рд╣реЛрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдХрдВрд╕реЛрд▓.рд▓реЙрдЧ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░реЗрдЧрд╛ред рдореИрдВ рдЕрддрд┐рд╢рдпреЛрдХреНрддрд┐ рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред рдЗрди рд▓реЛрдЧреЛрдВ рдХреЛ рдХрдо рд╕реЗ рдХрдо рджреЛ рд╕рд╛рд▓ рдХрд╛ рдлрд┐рд░ рд╕реЗ рд╢реБрд░реВ рдФрд░ рдХрд╛рдо рдХрд░рдиреЗ рдХрд╛ рдЕрдиреБрднрд╡ рд╣реИ, рдФрд░ рдЙрдиреНрд╣реЛрдВрдиреЗ рдЕрдиреНрдп рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рд╣рд▓ рдХрд┐рдпрд╛ рдЬреЛ рдХреЙрд▓рдмреИрдХ рд╕реЗ рдмрдВрдзреЗ рдирд╣реАрдВ рдереЗред рдпрд╛ рддреЛ рдпрд╣ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреА рдПрдХ рдирдИ рдкреАрдврд╝реА рд╣реИ рдЬреЛ async / рдкреНрд░рддреАрдХреНрд╖рд┐рдд рдкрд░ рдмрдбрд╝реЗ рд╣реБрдП рд╣реИрдВ, рдЬрд┐рдиреНрд╣реЛрдВрдиреЗ рд╡рд╛рджрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рдФрд░ рд╕реБрдирд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЙрдирдХреЗ рд▓рд┐рдП рдХреЙрд▓рдмреИрдХ - рдЬреИрд╕реЗ рдХрд┐ рдПрдХ рдЖрдзреБрдирд┐рдХ рдХрд┐рд╢реЛрд░ рдХреЗ рд▓рд┐рдП рдПрдХ рдбрд┐рд╕реНрдХ рдлреЛрди - рдирдВрдмрд░ рдбрд╛рдпрд▓ рдХрд░реЗрдЧрд╛, рднрд▓реЗ рд╣реА рдкрд╣рд▓реА рдмрд╛рд░ рдирд╣реАрдВ, рд▓реЗрдХрд┐рди рд╕рдордЭ рдореЗрдВ рдирд╣реАрдВ рдЖрдПрдЧрд╛ рдпрд╣ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдФрд░ рдХреНрдпреЛрдВред
рдЗрд╕ рдХрд╛рд░реНрдп рдореЗрдВ рдПрдХ рдирд┐рд░рдВрддрд░рддрд╛ рд╣реИ: рдЖрдкрдХреЛ рдХреЛрдб рдЬреЛрдбрд╝рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рддрд╛рдХрд┐ рдХрдВрд╕реЛрд▓.рд▓реЙрдЧ рд╕реЗрдЯрдЯрд╛рдЗрдордЖрдЙрдЯ рдХреЗ рдЕрдВрджрд░ рднреА рдЪрд▓реЗ, рд▓реЗрдХрд┐рди рдорд╛рди 1, 2, 3, 4 рдХрдВрд╕реЛрд▓ рдореЗрдВ рдкреНрд░рджрд░реНрд╢рд┐рдд рд╣реЛрддреЗ рд╣реИрдВред рдХрд╣рд╛рд╡рдд "рдЬреАрдирд╛, рд╕реАрдЦрдирд╛" рдпрд╣рд╛рдВ рдЙрдкрдпреБрдХреНрдд рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдПрдХ рдмрд╛рд░ рд╕рд╛рдХреНрд╖рд╛рддреНрдХрд╛рд░рдХрд░реНрддрд╛рдУрдВ рдореЗрдВ рд╕реЗ рдПрдХред рдРрд╕реЗ рд╕рдорд╛рдзрд╛рди рдХрд╛ рдкреНрд░рд╕реНрддрд╛рд╡:
setTimeout(n => console.log(n), 10 + n, n)
рдФрд░ рдлрд┐рд░ рдореБрдЭреЗ рдкрддрд╛ рдЪрд▓рд╛ рдХрд┐ рд╕реЗрдЯрдЯрд╛рдЗрдордЖрдЙрдЯ рдФрд░ рд╕реЗрдЯрдЗрдВрдЯрд░рд╡рд▓ рдХреЙрд▓рдмреИрдХ рдореЗрдВ рддреАрд╕рд░реЗ рдФрд░ рдмрд╛рдж рдХреЗ рддрд░реНрдХреЛрдВ рдХреЛ рдкрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВред рдпрд╣ рд╢рд░реНрдо рдХреА рдмрд╛рдд рд╣реИ, рд╣рд╛рдБред рд╡реИрд╕реЗ, рдЬреНрдЮрд╛рди рдЙрдкрдпреЛрдЧреА рд╕рд╛рдмрд┐рдд рд╣реБрдЖ: рдореИрдВрдиреЗ рдЗрд╕ рд╕реБрд╡рд┐рдзрд╛ рдХрд╛ рдПрдХ рд╕реЗ рдЕрдзрд┐рдХ рдмрд╛рд░ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рд╣реИред
рд▓реЗрдХрд┐рди рдореИрдВрдиреЗ рдпреИрдВрдбреЗрдХреНрд╕ рд╕реЗ рдпрд╣ рдХрд╛рд░реНрдп рдЙрдзрд╛рд░ рд▓рд┐рдпрд╛ рд╣реИ:
fetchUrl('https://google/com') .then(...) .catch(...)
рдпрд╣рд╛рдВ рд╡рд╛рджреЗ рдХреЗ рд╕рд╛рде рдХреМрд╢рд▓ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЖрдорддреМрд░ рдкрд░ рдореИрдВ рд╢реБрджреНрдз рд╡рд╛рджреЛрдВ рдкрд░ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣рддрд╛ рд╣реВрдВ, рдФрд░ рдЙрд╕рдХреЗ рдмрд╛рдж рдПрд╕рд┐рдВрдХреНрд╕ / рд╡реЗрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВред Async / рдкреНрд░рддреАрдХреНрд╖рд╛ рдХреЗ рд╕рд╛рде, рд╕рдорд╛рдзрд╛рди рд╕рд╣рдЬ рд░реВрдк рд╕реЗ рд╕рд░рд▓ рд╣реИ:
function async fetchUrl(url) { for (let n = 0; n < 5; n++) { try { return await fetch(url) } catch (err) { } } throw new Error('Fetch failed after 5 attempts') }
рдЖрдк рдЗрд╕ рдирд┐рд░реНрдгрдп рдХреЗ рд▓рд┐рдП "рд▓рд╛рдЗрд╡, рдЬрд╛рдиреЗрдВ" рдХреЛ рднреА рд▓рд╛рдЧреВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдореЗрд░реЗ рдпрд╛рдВрдбреЗрдХреНрд╕ рд╕рд╛рдХреНрд╖рд╛рддреНрдХрд╛рд░рдХрд░реНрддрд╛ рдХреЗ рд╕рдВрдмрдВрдз рдореЗрдВ: рдЙрдиреНрд╣реЛрдВрдиреЗ рдпрд╣ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдХрд┐ async / рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдпрд╛ рдирд╣реАрдВ, рдФрд░ рдЬрдм рдореИрдВрдиреЗ рдЗрд╕ рд╕рдорд╛рдзрд╛рди рдХреЛ рд▓рд┐рдЦрд╛, рддреЛ рдЙрдиреНрд╣реЗрдВ рдЖрд╢реНрдЪрд░реНрдп рд╣реБрдЖ: рдореИрдВрдиреЗ рдХрд╛рдо рдирд╣реАрдВ рдХрд┐рдпрд╛ async / рдкреНрд░рддреАрдХреНрд╖рд╛ рдХреЗ рд╕рд╛рде, рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдЗрд╕реЗ рдЗрддрдиреА рдЖрд╕рд╛рдиреА рд╕реЗ рд╣рд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред тАЭ рдЙрдиреНрд╣реЛрдВрдиреЗ рд╢рд╛рдпрдж рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рд╕реЗ рджреЗрдЦрдиреЗ рдХреА рдЙрдореНрдореАрдж рдХреА:
function fetchUrl(url, attempt = 5) { return Promise.resolve() .then(() => fetch(url)) .catch(() => attempt-- ? fetchUrl(url, attempt) : Promise.reject('Fetch failed after 5 attempts')) }'error'
рдпрд╣ рдЙрджрд╛рд╣рд░рдг рдпрд╣ рджрд┐рдЦрд╛рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реИ рдХрд┐ рдХреЛрдИ рд╡реНрдпрдХреНрддрд┐ рд╡рд╛рджреЛрдВ рдХреЛ рдХрд┐рддрдиреА рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕рдордЭрддрд╛ рд╣реИ, рдпрд╣ рдкреАрда рдкрд░ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИред рдПрдХ рдмрд╛рд░ рдЬрдм рдореИрдВрдиреЗ рдПрдХ рдбреЗрд╡рд▓рдкрд░ рдХреЗ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛрдб рдХреЛ рджреЗрдЦрд╛, рдЬреЛ рд╡рд╛рджреЛрдВ рдХреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдирд╣реАрдВ рд╕рдордЭрддрд╛ рдерд╛, рддреЛ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╕реАрдХреНрд╡реЗрд▓рд┐рдЬрд╝ рд▓реЗрдирджреЗрди рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд╛рджрд╛ рддреИрдпрд╛рд░ рдХрд┐рдпрд╛:
const transaction = Promise.resolve() for (const user of users) { transaction.then(() => { return some_action... }) }
рдФрд░ рд╕реЛрдЪ рд░рд╣рд╛ рдерд╛ рдХрд┐ рдЙрд╕рдХреЗ рд▓реЗрдирджреЗрди рдореЗрдВ рдХреЗрд╡рд▓ рдПрдХ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреНрдпреЛрдВ рджрд┐рдЦрд╛рдИ рджреЗрддрд╛ рд╣реИред рдПрдХ Promise.all рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдХреЛрдИ рдпрд╣ рдЬрд╛рди рд╕рдХрддрд╛ рд╣реИ рдХрд┐ Promise.prototyp.then рдПрдХ рдФрд░ рдХреЙрд▓рдмреИрдХ рдирд╣реАрдВ рдЬреЛрдбрд╝рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдПрдХ рдирдпрд╛ рд╡рд╛рджрд╛ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдпрд╣ рдЗрд╕ рддрд░рд╣ рд╣реЛрдЧрд╛:
let transaction = Promise.resolve() for (const user of users) { transaction = transaction.then(() => { await perform_some_operation... return some_action... }) }
рдЗрд╕ рдорд╛рдорд▓реЗ рдиреЗ рдореБрдЭреЗ рд╡рд╛рджреЛрдВ рдХреЛ рд╕рдордЭрдиреЗ рдХреЗ рдХрд╛рд░реНрдп рдХреЛ рдЬрдЯрд┐рд▓ рдмрдирд╛рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪрд╛, рд▓реЗрдХрд┐рди рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рд╕реЗ рдЗрдирдХрд╛рд░ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдЙрдореНрдореАрджрд╡рд╛рд░ рдиреЗ рдореБрдЭреЗ рдПрдХ рдирдпрд╛ рдХрд╛рд░реНрдп рддреИрдпрд╛рд░ рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХреА, рдЙрдиреНрд╣реЗрдВ рд╢рд╛рдмреНрджрд┐рдХ рд░реВрдк рд╕реЗ рдмрдХрд╡рд╛рд╕ рдХрд╣рд╛ рдФрд░ рдХрд╣рд╛ рдХрд┐ рд╡рд╣ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдХреЛрдб рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рдЖрджреА рдереЗ, рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рдореИрдВрдиреЗ рдХреБрдЫ рдорд┐рдирдЯреЛрдВ рдХреЗ рд▓рд┐рдП рдЕрдлрд╡рд╛рд╣ рдЙрдбрд╝рд╛рдИред рд╣рдорд╛рд░реА рдПрдХ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рд╕реНрд░реЛрдд рдХреЛрдб рдореЗрдВ, рдЙрд╕реЗ рдЕрд╕рд▓реА рдХреЛрдб рджрд┐рдпрд╛:
public async addTicket(data: IAddTicketData): Promise<number> { const user = data.fromEmail ? await this.getUserByEmail(data.fromEmail) : undefined let category = data.category if (category === 'INCIDENT' && await this.isCategorizableType(data.type)) { category = 'INC_RFC' } const xml = await this.twig.render('Assyst/Views/add.twig', { from: data.fromEmail, text: data.text, category, user, }) const response = await this.query('events', 'post', xml) return new Promise((resolve, reject) => { xml2js.parseString(response, (err, result) => { if (err) { return reject(new Error(err.message)) } if (result.exception) { return reject(new Error(result.exception.message)) } resolve(result.event.id - 5000000) }) }) }
рдФрд░ рдПрд╕рд┐рдВрдХреНрд╕ / рд╡реЗрдЯ рдХреАрд╡рд░реНрдб рд╕реЗ рдЫреБрдЯрдХрд╛рд░рд╛ рдкрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣рд╛ред рддрдм рд╕реЗ, рдпрд╣ рдХрд╛рд░реНрдп рдкрд╣рд▓реЗ рдФрд░, рдЖрдзреЗ рдорд╛рдорд▓реЛрдВ рдореЗрдВ, рд╕рд╛рдХреНрд╖рд╛рддреНрдХрд╛рд░ рдореЗрдВ рдЖрдЦрд┐рд░реА рдерд╛ - рд╡рд╣ рдЕрдХреНрд╕рд░ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЕрднрд┐рднреВрдд рд╣реЛрддрд╛ рд╣реИред
рдореИрдВрдиреЗ рд╕реНрд╡рдпрдВ рдЗрд╕ рдиреЛрдЯ рдХреЛ рд▓рд┐рдЦрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рдХрднреА рд╣рд▓ рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИ рдФрд░ рдЗрд╕реЗ
рдкрд╣рд▓реА рдмрд╛рд░ рддреАрд╕рд░реА рдмрд╛рд░ рдХрд░рддреЗ рд╣реИрдВ (
рдкрд╣рд▓рд╛ рдмрд╣реБрдд рд▓рдВрдмрд╛ рд╣реИ, рдФрд░
рджреВрд╕рд░реЗ рдореЗрдВ рдореИрдВрдиреЗ рдПрдХ рд╢реЗрд╖ рдкреНрд░рддреАрдХреНрд╖рд╛ рдкрд░ рдзреНрдпрд╛рди рдирд╣реАрдВ рджрд┐рдпрд╛ рд╣реИ):

рдЗрд╕ рд╕рдм рд╕реЗ рдХреНрдпрд╛ рдирд┐рд╖реНрдХрд░реНрд╖ рдирд┐рдХрд╛рд▓рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ? рд╕рд╛рдХреНрд╖рд╛рддреНрдХрд╛рд░ рджрд┐рд▓рдЪрд╕реНрдк рдФрд░ рдЙрдкрдпреЛрдЧреА рд╣реИрдВ ... рдмреЗрд╢рдХ, рдпрджрд┐ рдЖрдк рддрддреНрдХрд╛рд▓ рдХрд╛рдо рдХреА рддрд▓рд╛рд╢ рдореЗрдВ рдирд╣реАрдВ рд╣реИрдВред
рдЕрдВрдд рдореЗрдВ, рдореИрдВ рдЖрдкрдХреЛ рдпрд╛рдВрдбреЗрдХреНрд╕ рдХреЗ рд╕рд╛рде рдХрд╣рд╛рдиреА рдХрд╛ рдПрдХ рдФрд░ рдХрд╛рдо рджреВрдВрдЧрд╛, рдореИрдВрдиреЗ рдЗрд╕реЗ рдХрд┐рд╕реА рдХреЛ рдирд╣реАрдВ рджрд┐рдЦрд╛рдпрд╛ рд╣реИ
* рдлрд┐рд░ рднреА, рдореИрдВрдиреЗ рдЗрд╕ рдмрд╛рдд рдХрд╛ рдзреНрдпрд╛рди рд░рдЦрд╛ рд╣реИ рдХрд┐ рдПрдХ рд╡рд┐рд╢реЗрд╖ рдорд╛рдорд▓реЗ рдХреЛ рдХреНрдпрд╛ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рдмреИрдирд░ рдХрд╛ рдПрдХ рд╕реЗрдЯ рд╣реИ, рдкреНрд░рддреНрдпреЗрдХ рдмреИрдирд░ рдореЗрдВ рдПрдХ "рд╡рдЬрди" рд╣реЛрддрд╛ рд╣реИ, рдЬреЛ рджрд░реНрд╢рд╛рддрд╛ рд╣реИ рдХрд┐ рдмреИрдирд░ рдЕрдиреНрдп рдмреИрдирд░ рдХреЗ рд╕рд╛рдкреЗрдХреНрд╖ рдХрд┐рддрдиреА рдмрд╛рд░ рдкреНрд░рджрд░реНрд╢рд┐рдд рд╣реЛрдЧрд╛:
const banners = [ { name: 'banner 1', weight: 1 }, { name: 'banner 2', weight: 1 }, { name: 'banner 3', weight: 1 }, { name: 'banner 4', weight: 1 }, { name: 'banner 5', weight: 3 }, { name: 'banner 6', weight: 2 }, { name: 'banner 7', weight: 2 }, { name: 'banner 8', weight: 2 }, { name: 'banner 9', weight: 4 }, { name: 'banner 10', weight: 1 }, ]
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрджрд┐ рднрд╛рд░ 1, 1, 2 рдХреЗ рд╕рд╛рде рддреАрди рдмреИрдирд░ рд╣реИрдВ, рддреЛ рдЙрдирдХрд╛ рд╕рдВрдпреБрдХреНрдд рд╡рдЬрди 4 рд╣реИ, рдФрд░ рддреАрд╕рд░реЗ рдХрд╛ рд╡рдЬрди рдХреБрд▓ рд╡рдЬрди рдХрд╛ 2/4 рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЗрд╕реЗ 50% рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдпрд╣ рдЖрд╡рд╢реНрдпрдХ рд╣реИ рдХрд┐ getBanner рдлрд╝рдВрдХреНрд╢рди рдХреЛ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рдП, рдЬреЛ рдЕрдирд┐рдпрдорд┐рдд рд░реВрдк рд╕реЗ рд╣реЛрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╡рдЬрди рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрддреЗ рд╣реБрдП, рдкреНрд░рджрд░реНрд╢рди рдХреЗ рд▓рд┐рдП рдПрдХ рдмреИрдирд░ рджреЗрддрд╛ рд╣реИред рд╕рдорд╛рдзрд╛рди рдХреЛ
рдЗрд╕ рд╕реНрдирд┐рдкреЗрдЯ рдореЗрдВ рдЬрд╛рдВрдЪрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЬрд╣рд╛рдВ рдЕрдкреЗрдХреНрд╖рд┐рдд рдФрд░ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╡рд┐рддрд░рдг рдкреНрд░рджрд░реНрд╢рд┐рдд рд╣реЛрддрд╛ рд╣реИред
рдпреВрдкреАрдбреА: рдЙрдиреНрд╣реЛрдВрдиреЗ рди рдХреЗрд╡рд▓ рд▓реЗрдЦ рдХреЛ рд╢реВрдиреНрдп рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдмрд▓реНрдХрд┐ рдХрд░реНрдо рдХреЛ рдЫрд▓рд╛рдВрдЧ рдФрд░ рд╕реАрдорд╛ рдХреЗ рд╕рд╛рде рдЬрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╢реБрд░реВ рдХрд┐рдпрд╛, рдФрд░ рдореИрдВрдиреЗ рдЗрд╕реЗ рд╕рд╛рдордЧреНрд░реА рдХреЛ рдЫрд┐рдкрд╛рдиреЗ рдореЗрдВ рдЫрд┐рдкрд╛ рджрд┐рдпрд╛, рдЬреЛ рдЯрд┐рдкреНрдкрдгреАрдХрд╛рд░реЛрдВ рдХреЗ рд╕рдВрдмрдВрдз рдореЗрдВ рдмрджрд╕реВрд░рдд рд╣реИред рдореИрдВ рдЕрдкрдиреЗ рд╣рд┐рд╕реНрд╕реЗ рдкрд░ рдЗрд╕ рдЧрд╛рд▓рд┐рдпреЛрдВ рдХреЛ рдареАрдХ рдХрд░рддрд╛ рд╣реВрдВред