ВСория вмСсто эвристики: становимся Π»ΡƒΡ‡ΡˆΠ΅ ΠΊΠ°ΠΊ frontend-Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ

ВСория вмСсто эвристики: становимся Π»ΡƒΡ‡ΡˆΠ΅ ΠΊΠ°ΠΊ frontend-Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ

ΠŸΠ΅Ρ€Π΅Π²ΠΎΠ΄ Becoming a better front-end developer using fundamentals instead of heuristics

Наш ΠΎΠΏΡ‹Ρ‚ ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Π½Π΅ ΠΈΠΌΠ΅ΡŽΡ‰ΠΈΠ΅ тСхничСского образования Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ ΠΈ самоучки Ρ‡Π°Ρ‰Π΅ ΠΏΠΎΠ»Π°Π³Π°ΡŽΡ‚ΡΡ Π½Π΅ Π½Π° тСорСтичСскиС ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΡ‹, Π° Π½Π° эвристичСскиС ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹.

Эвристика β€” ΡˆΠ°Π±Π»ΠΎΠ½Ρ‹ ΠΈ ΠΏΡ€ΠΎΠ²Π΅Ρ€Π΅Π½Π½Ρ‹Π΅ ΠΏΡ€Π°Π²ΠΈΠ»Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ вынСс ΠΈΠ· ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠΈ. Они ΠΌΠΎΠ³ΡƒΡ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ нСидСально ΠΈΠ»ΠΈ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π½ΠΎ, Π½ΠΎ Π² достаточной ΠΌΠ΅Ρ€Π΅, ΠΈ Π½Π΅ Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‚ ΡΠ΅Ρ€ΡŒΡ‘Π·Π½Ρ‹Ρ… Ρ€Π°Π·ΠΌΡ‹ΡˆΠ»Π΅Π½ΠΈΠΉ. Π’ΠΎΡ‚ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ эвристики:

  • Β«Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉ $(document).ready(function(){}) для ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΊΠΎΠ΄Π° Π½Π° jQuery-сайтах»
  • Β«ΠšΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡ var self = this Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠ° для Π²Ρ‹Π·ΠΎΠ²Π° ΠΌΠ΅Ρ‚ΠΎΠ΄Π° Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠ³ΠΎ Π²Ρ‹Π·ΠΎΠ²Π°Β»
  • Β«Π£ стрСлочных Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ Π½Π΅Ρ‚ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ² returnΒ»

Π’ Ρ‚ΠΎ ΠΆΠ΅ врСмя, тСорСтичСский ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ использован для поиска Ρ€Π΅ΡˆΠ΅Π½ΠΈΠΉ Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ. Он Π½Π΅ΠΈΠ·ΠΌΠ΅Π½Π½ΠΎ Π²Π΅Ρ€Π΅Π½ ΠΈ часто опрСдСляСт само устройство Ρ€Π°Π±ΠΎΡ‚Ρ‹ Ρ‚ΠΎΠ³ΠΎ ΠΈΠ»ΠΈ ΠΈΠ½ΠΎΠ³ΠΎ элСмСнта. К тСорСтичСским ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠ°ΠΌ относятся, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅: ΠΌΡ‹ Π·Π°ΠΊΠ»ΡŽΡ‡ΠΈΠ»ΠΈ Π² ΠΊΠ°Π²Ρ‹Ρ‡ΠΊΠΈ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ эвристики β€” для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ΄Ρ‡Π΅Ρ€ΠΊΠ½ΡƒΡ‚ΡŒ кустарный Ρ…Π°Ρ€Π°ΠΊΡ‚Π΅Ρ€ эвристики ΠΏΠΎ ΡΡ€Π°Π²Π½Π΅Π½ΠΈΡŽ со ΡΡ‚Ρ€ΠΎΠ³ΠΎΡΡ‚ΡŒΡŽ тСорСтичСских основ. Ни ΠΎΠ΄ΠΈΠ½ ΠΈΠ· ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠ² эвристики Π½Π΅ являСтся ΡƒΠ½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½Ρ‹ΠΌ для всСх случаСв, Π½ΠΎ ΠΎΠ½ΠΈ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ Π² достаточном количСствС ситуаций, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡŽΡ‰ΠΈΠ΅ ΠΈΡ… Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ ΠΏΠΎΠ»ΡƒΡ‡Π°Π»ΠΈ Ρ€Π°Π±ΠΎΡ‡ΠΈΠΉ ΠΊΠΎΠ΄ Π±Π΅Π· ΠΏΠΎΠ»Π½ΠΎΠ³ΠΎ понимания Π΅Π³ΠΎ Ρ€Π°Π±ΠΎΡ‚Ρ‹.

АргумСнты Π² ΠΏΠΎΠ»ΡŒΠ·Ρƒ тСорСтичСского ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π°

ΠœΡ‹ часто ΡΡ‚Π°Π»ΠΊΠΈΠ²Π°Π»ΠΈΡΡŒ с Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎ Π½Π΅ ΠΈΠΌΠ΅ΡŽΡ‰ΠΈΠ΅ тСхничСского образования Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ Π½Π΅ склонны Ρ€Π΅ΡˆΠ°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ тСорСтичСских ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠΎΠ². Как ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, это ΠΎΠ±ΡŠΡΡΠ½ΡΠ΅Ρ‚ΡΡ Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎ Π² Π½Π°Ρ‡Π°Π»Π΅ ΠΊΠ°Ρ€ΡŒΠ΅Ρ€Ρ‹ Ρƒ Π½ΠΈΡ… Π½Π΅ Π±Ρ‹Π»ΠΎ возмоТности ΠΈΡ… Π²Ρ‹ΡƒΡ‡ΠΈΡ‚ΡŒ, ΠΈ, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ эвристичСскиС ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ ΡƒΠ΄ΠΎΠ²Π»Π΅Ρ‚Π²ΠΎΡ€ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ, ΠΎΠ½ΠΈ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°ΡŽΡ‚ ΠΈΠΌΠΈ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ.

Однако, нСсмотря Π½Π° ΠΊΠ°ΠΆΡƒΡ‰ΡƒΡŽΡΡ ΡΠ»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ, Π²Ρ‹ΡƒΡ‡ΠΈΡ‚ΡŒ Ρ‚Π΅ΠΎΡ€ΠΈΡŽ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΎΡ‡Π΅Π½ΡŒ ΠΏΠΎΠ»Π΅Π·Π½ΠΎ. Π—Π°Ρ‡Π΅ΠΌ? Π—Π°Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎ тСория ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ Π²Π°ΠΌ Ρ‡ΡƒΠ²ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ ΡƒΠ²Π΅Ρ€Π΅Π½Π½ΠΎΡΡ‚ΡŒ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ вашС Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚, Π° Ρ‚Π°ΠΊΠΆΠ΅ ΡΠ°ΠΌΠΎΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎ Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΎΡ‚Π²Π΅Ρ‚Ρ‹ Π½Π° Π½ΠΎΠ²Ρ‹Π΅ вопросы, Π½Π΅ имСя потрСбности ΠΈΡΠΊΠ°Ρ‚ΡŒ Ρ‡ΡƒΠΆΠΈΠ΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ. Π’ краткосрочной пСрспСктивС эвристичСскиС Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΡ‹ ΠΌΠΎΠ³ΡƒΡ‚ ΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ простым ΠΈ быстрым Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ΠΌ, Π½ΠΎ часто Π±ΡƒΠ΄ΡƒΡ‚ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΊ Π½Π΅ΠΈΠ΄Π΅Π°Π»ΡŒΠ½Ρ‹ΠΌ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡΠΌ β€” Ссли Π²ΠΎΠΎΠ±Ρ‰Π΅ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ΡŒ.

К Ρ‚ΠΎΠΌΡƒ ΠΆΠ΅, полагаясь Π½Π° эвристичСскиС ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹, Π²Ρ‹ Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ Π½Π°ΡƒΡ‡ΠΈΡ‚Π΅ΡΡŒ Ρ€Π΅ΡˆΠ°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ ΠΏΠΎ-настоящСму. Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, достаточно часто Π²Π°ΠΌ удастся Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒ Ρ€Π°Π±ΠΎΡ‡Π΅Π΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅, Π½ΠΎ Ρ€Π°Π½ΠΎ ΠΈΠ»ΠΈ ΠΏΠΎΠ·Π΄Π½ΠΎ Π²Ρ‹ Π·Π°ΠΉΠ΄Π΅Ρ‚Π΅ Π² Ρ‚ΡƒΠΏΠΈΠΊ, Π²Ρ‹Ρ…ΠΎΠ΄Π° ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Π½Π΅ ΡƒΠ²ΠΈΠ΄ΠΈΡ‚Π΅. На эвристику Π² своСй Ρ€Π°Π±ΠΎΡ‚Π΅ ΠΏΠΎΠ»Π°Π³Π°ΡŽΡ‚ΡΡ C&P-программисты.

ΠšΡ€ΠΈΡ‚Π΅Ρ€ΠΈΠΉ уровня Π½Π°Π²Ρ‹ΠΊΠΎΠ² Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°

ΠŸΡ€ΠΎΠ²ΠΎΠ΄Ρ собСсСдованиС с frontend-Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°ΠΌΠΈ, ΠΌΡ‹ ставим ΠΏΠ΅Ρ€Π΅Π΄ Π½ΠΈΠΌΠΈ Π·Π°Π΄Π°Ρ‡Ρƒ ΠΏΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡŽ ΠΈ Π³ΠΎΠ²ΠΎΡ€ΡŽ, Ρ‡Ρ‚ΠΎ ΠΎΠ½ΠΈ Π²ΠΎΠ»ΡŒΠ½Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π»ΡŽΠ±Ρ‹Π΅ источники, Π±ΡƒΠ΄ΡŒ Ρ‚ΠΎ Google ΠΈΠ»ΠΈ Stack Overflow. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ ΠΌΠΎΠΆΠ½ΠΎ Π»Π΅Π³ΠΊΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ, являСтся Π»ΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ Π°Π΄Π΅ΠΏΡ‚ΠΎΠΌ эвристики ΠΈΠ»ΠΈ Ρ‚Π΅ΠΎΡ€ΠΈΠΈ.

ΠŸΠ΅Ρ€Π²Ρ‹Π΅ Π±Π΅Π· всякого ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ ΠΊΠΎΠΏΠΈΡ€ΡƒΡŽΡ‚ ΠΊΠΎΠ΄ ΠΈΠ· Π±ΠΎΠ»Π΅Π΅-ΠΌΠ΅Π½Π΅Π΅ подходящих ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠ² со Stack Overflow. Π›ΠΈΡˆΡŒ ΠΊΠΎΠ³Π΄Π° ΠΊΠΎΠ΄ Π·Π°Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π½Π΅ Ρ‚Π°ΠΊ, ΠΊΠ°ΠΊ ΠΏΠ»Π°Π½ΠΈΡ€ΠΎΠ²Π°Π»ΠΎΡΡŒ, ΠΎΠ½ΠΈ Π½Π°Ρ‡Π½ΡƒΡ‚ ΠΏΠΎΠ΄ΡΡ‚Ρ€Π°ΠΈΠ²Π°Ρ‚ΡŒ Π΅Π³ΠΎ ΠΏΠΎΠ΄ сСбя. Часто ΠΈΠΌ это Π½Π΅ удаСтся.

Π’Ρ‚ΠΎΡ€Ρ‹Π΅ ΠΆΠ΅ склонны ΠΈΡΠΊΠ°Ρ‚ΡŒ ΠΎΡ‚Π²Π΅Ρ‚Ρ‹ Π² API-Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ. Π’Π°ΠΌ ΠΎΠ½ΠΈ находят ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ Ρ‚ΠΎΠΌ, сколько ΠΊΠ°ΠΊΠΈΡ… ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ Ρ‚Π° ΠΈΠ»ΠΈ иная функция, ΠΈΠ»ΠΈ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹ΠΉ синтаксис Ρ€Π°Π·Π²Π΅Ρ€Π½ΡƒΡ‚ΠΎΠΉ Ρ„ΠΎΡ€ΠΌΡ‹ Π½ΡƒΠΆΠ½ΠΎΠ³ΠΎ CSS-свойства.

Π£ΠΆΠ΅ Π² ΠΏΠ΅Ρ€Π²Ρ‹Π΅ ΠΏΡΡ‚ΡŒ ΠΌΠΈΠ½ΡƒΡ‚ собСсСдования ΠΌΠΎΠΆΠ½ΠΎ Ρ‚ΠΎΡ‡Π½ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ, ΠΊ ΠΊΠ°ΠΊΠΎΠΌΡƒ Ρ‚ΠΈΠΏΡƒ программистов относится ΠΊΠ°Π½Π΄ΠΈΠ΄Π°Ρ‚.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€

Π’ΠΎΠ·ΡŒΠΌΠ΅ΠΌ для ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ° Π‘ΠΈΠ»Π»Π°. Он ΠΏΡ€ΠΎΡˆΠ΅Π» нСсколько ΠΎΠ±ΡƒΡ‡Π°ΡŽΡ‰ΠΈΡ… курсов, Ρ€Π΅ΡˆΠΈΠ» Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ количСство Π·Π°Π΄Π°Ρ‡ Π½Π° JavaScript ΠΈ Π² свободноС врСмя писал сайты, Π½ΠΎ Β«ΠΏΠΎ-настоящСму» JavaScript Π½Π΅ ΠΈΠ·ΡƒΡ‡Π°Π».

ΠžΠ΄Π½Π°ΠΆΠ΄Ρ‹ Π‘ΠΈΠ»Π»Ρƒ попадаСтся ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Π½Π°ΠΏΠΎΠ΄ΠΎΠ±ΠΈΠ΅ этого:

const usersById = {
    "5": { "id": "5", "name": "Adam", "registered": true },
    "27": { "id": "27", "name": "Bobby", "registered": true },
    "32": { "id": "32", "name": "Clarence", "registered": false },
    "39": { "id": "39", "name": "Danielle", "registered": true },
    "42": { "id": "42", "name": "Ekaterina", "registered": false }
}

Π’Π°ΠΊΠΎΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Ρ‚ΡŒ список ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ ΠΈ Ρ‚ΠΎ, Π·Π°Ρ€Π΅Π³ΠΈΡΡ‚Ρ€ΠΈΡ€ΠΎΠ²Π°Π»ΠΈΡΡŒ Π»ΠΈ ΠΎΠ½ΠΈ Π½Π° ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ΅ мСроприятиС.

Допустим, Π‘ΠΈΠ»Π»Ρƒ Π½ΡƒΠΆΠ½ΠΎ ΠΈΠ·Π²Π»Π΅Ρ‡ΡŒ список зарСгистрированных ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ. Π˜Π½Ρ‹ΠΌΠΈ словами, ΠΎΡ‚Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΡ…. Π•ΠΌΡƒ попадался ΠΊΠΎΠ΄, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΌΠ΅Ρ‚ΠΎΠ΄ .filter() использовался для Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°Ρ†ΠΈΠΈ списка. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ ΠΎΠ½ ΠΏΡ€ΠΎΠ±ΡƒΠ΅Ρ‚ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ Π²Ρ€ΠΎΠ΄Π΅:

const attendees = usersById.filter(user => user.registered);

И Π²ΠΎΡ‚ Ρ‡Ρ‚ΠΎ ΠΎΠ½ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚:

TypeError: usersById.filter is not a function

«Какая-Ρ‚ΠΎ бСссмыслица», β€” Π΄ΡƒΠΌΠ°Π΅Ρ‚ Π‘ΠΈΠ»Π», вСдь ΠΎΠ½ Π²ΠΈΠ΄Π΅Π» ΠΊΠΎΠ΄, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ .filter() срабатывал Π² качСствС Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°.

ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΠ° Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Π‘ΠΈΠ»Π» полоТился Π½Π° эвристичСский ΠΌΠ΅Ρ‚ΠΎΠ΄. Он Π½Π΅ ΠΏΠΎΠ½ΠΈΠΌΠ°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ filter β€” ΠΌΠ΅Ρ‚ΠΎΠ΄, опрСдСляСмый Π½Π° массивах, Ρ‚ΠΎΠ³Π΄Π° ΠΊΠ°ΠΊ usersById β€” ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, Π½Π΅ ΠΈΠΌΠ΅ΡŽΡ‰ΠΈΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° filter.

Π‘Π±ΠΈΡ‚Ρ‹ΠΉ с Ρ‚ΠΎΠ»ΠΊΡƒ Π‘ΠΈΠ»Π» Π³ΡƒΠ³Π»ΠΈΡ‚ Β«javascript Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Β». Он Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ мноТСство ΡƒΠΏΠΎΠΌΠΈΠ½Π°Π½ΠΈΠΉ массивов ΠΈ ΠΏΠΎΠ½ΠΈΠΌΠ°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Π΅ΠΌΡƒ Π½ΡƒΠΆΠ½ΠΎ ΠΏΡ€Π΅Π²Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ usersById Π² массив. Π—Π°Ρ‚Π΅ΠΌ ΠΏΠΎ запросу Β«javascript ΠΏΡ€Π΅Π²Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Π² массив» ΠΎΠ½ Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ Π½Π° Stack Overflow ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ с использованиСм Object.keys(). ПослС этого ΠΎΠ½ ΠΏΡ€ΠΎΠ±ΡƒΠ΅Ρ‚:

const attendees = Object.keys(usersById).filter(user => user.registered);

На этот Ρ€Π°Π· ошибка Π½Π΅ выводится, Π½ΠΎ, ΠΊ ΡƒΠ΄ΠΈΠ²Π»Π΅Π½ΠΈΡŽ Π‘ΠΈΠ»Π»Π°, ΠΏΠΎΠ»Π΅ attendees остаСтся пустым.

Π”Π΅Π»ΠΎ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Object.keys() Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΊΠ»ΡŽΡ‡ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°, Π½ΠΎ Π½Π΅ Π΅Π³ΠΎ значСния. По сути, Π½Π°ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ user Π»Π΅Π³ΠΊΠΎ Π²Π²ΠΎΠ΄ΠΈΡ‚ Π² Π·Π°Π±Π»ΡƒΠΆΠ΄Π΅Π½ΠΈΠ΅, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ это Π½Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ user, Π° ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ строка. Π’Π°ΠΊ ΠΊΠ°ΠΊ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ registered для строк Π½Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½, filter расцСниваСт ΠΊΠ°ΠΆΠ΄ΡƒΡŽ запись ΠΊΠ°ΠΊ Π»ΠΎΠΆΠ½ΡƒΡŽ, ΠΈ массив Π²Ρ‹Ρ…ΠΎΠ΄ΠΈΡ‚ пустым.

Π‘ΠΈΠ»Π» присматриваСтся ΠΊ ΠΎΡ‚Π²Π΅Ρ‚Π°ΠΌ Π½Π° Stack Overflow ΠΏΠΎΠ±Π»ΠΈΠΆΠ΅ ΠΈ вносит ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅:

const attendees = Object.keys(usersById).filter(id => usersById[id].registered);

На этот Ρ€Π°Π· Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Π»ΡƒΡ‡ΡˆΠ΅: ["5", "27", "39"]. Но Π‘ΠΈΠ»Π» Ρ…ΠΎΡ‚Π΅Π» ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ посСтитСлСй, Π° Π½Π΅ ΠΈΡ… ID.

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ½ΡΡ‚ΡŒ, ΠΊΠ°ΠΊ ΠΎΡ‚Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ΠΎΠ²Π°Ρ‚ΡŒ посСтитСлСй, Ρ€Π°Π·Π΄Ρ€Π°ΠΆΠ΅Π½Π½Ρ‹ΠΉ Π‘ΠΈΠ»Π» ΠΈΡ‰Π΅Ρ‚ Β«javascript Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ²Β», ΠΈΠ·ΡƒΡ‡Π°Π΅Ρ‚ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ поиска ΠΏΠΎ Stack Overflow ΠΈ Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ этот ΠΎΡ‚Π²Π΅Ρ‚ со ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΊΠΎΠ΄ΠΎΠΌ:

Object.filter = (obj, predicate) => 
    Object.keys(obj)
          .filter( key => predicate(obj[key]) )
          .reduce( (res, key) => (res[key] = obj[key], res), {} );

Π‘ΠΈΠ»Π» ΠΊΠΎΠΏΠΈΡ€ΡƒΠ΅Ρ‚ эти строки ΠΈ ΠΏΡ€ΠΎΠ±ΡƒΠ΅Ρ‚:

const attendees = Object.filter(usersById, user => user.registered);

Всё Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ β€” хотя ΠΈ нСпонятно, ΠΏΠΎΡ‡Π΅ΠΌΡƒ. Π‘ΠΈΠ»Π» Π½Π΅ ΠΏΠΎΠ½ΠΈΠΌΠ°Π΅Ρ‚, для Ρ‡Π΅Π³ΠΎ Π½ΡƒΠΆΠ΅Π½ reduce ΠΈ ΠΊΠ°ΠΊ ΠΎΠ½ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ. Π‘ΠΎΠ»Π΅Π΅ Ρ‚ΠΎΠ³ΠΎ, Π‘ΠΈΠ»Π» Π½Π΅ ΠΏΠΎΠ½ΠΈΠΌΠ°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ всСго лишь ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΠ» для глобального ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Object Π½ΠΎΠ²Ρ‹ΠΉ нСстандартный ΠΌΠ΅Ρ‚ΠΎΠ΄.

Но Π‘ΠΈΠ»Π»Ρƒ всё Ρ€Π°Π²Π½ΠΎ β€” Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ вСдь! ΠŸΠΎΡΠ»Π΅Π΄ΡΡ‚Π²ΠΈΡ Π΅Π³ΠΎ ΠΏΠΎΠΊΠ° Π½Π΅ ΠΈΠ½Ρ‚Π΅Ρ€Π΅ΡΡƒΡŽΡ‚.

Π§Ρ‚ΠΎ Π‘ΠΈΠ»Π» сдСлал Π½Π΅ Ρ‚Π°ΠΊ?

Π‘ΠΈΠ»Π» ΠΏΠΎΠΏΡ€ΠΎΠ±ΠΎΠ²Π°Π» эвристичСский ΠΌΠ΅Ρ‚ΠΎΠ΄ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ ΠΈ столкнулся со ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌΠΈ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°ΠΌΠΈ:

  1. Использовав .filter() Π½Π° ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ, Π‘ΠΈΠ»Π» ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ» TypeError. Он Π½Π΅ ΠΏΠΎΠ½ΠΈΠΌΠ°Π», Ρ‡Ρ‚ΠΎ filter Π½Π΅ опрСдСляСтся Π½Π° ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹Ρ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°Ρ….
  2. Он ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΠ» Object.keys(), Ρ‡Ρ‚ΠΎΠ±Ρ‹ Β«ΠΏΡ€Π΅Π²Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Π² массив», Π½ΠΎ само ΠΏΠΎ сСбС это Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π° Π½Π΅ принСсло. Π•ΠΌΡƒ Π½ΡƒΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ массив Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°.
  3. Π”Π°ΠΆΠ΅ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ² значСния ΠΈ использовав ΠΈΡ… ΠΊΠ°ΠΊ условиС для Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°Ρ†ΠΈΠΈ, ΠΎΠ½ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ» всСго лишь ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρ‹ вмСсто ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΡ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ², Π°ΡΡΠΎΡ†ΠΈΠΈΡ€ΡƒΡŽΡ‰ΠΈΡ…ΡΡ с этими ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Π°ΠΌΠΈ. Всё ΠΏΠΎΡ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ΡƒΠ΅ΠΌΡ‹ΠΉ массив содСрТал ID, Π° Π½Π΅ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹.
  4. Π‘ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½Π΅ΠΌ Π‘ΠΈΠ»Π» отказался ΠΎΡ‚ этого ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π° ΠΈ Π½Π°ΡˆΡ‘Π» Ρ€Π°Π±ΠΎΡ‡Π΅Π΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ Π² ΠΈΠ½Ρ‚Π΅Ρ€Π½Π΅Ρ‚Π΅. Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅, ΠΎΠ½ Π΄ΠΎ сих ΠΏΠΎΡ€ Π½Π΅ понял, ΠΊΠ°ΠΊ ΠΎΠ½ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ β€” ΠΈ Π½Π΅ станСт Ρ‚Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ врСмя Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Ρ€Π°Π·ΠΎΠ±Ρ€Π°Ρ‚ΡŒΡΡ, вСдь Ρƒ Π½Π΅Π³ΠΎ Π΅ΡΡ‚ΡŒ ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ Π΄Π΅Π»Π°.

Π­Ρ‚ΠΎ искусствСнный ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π½ΠΎ ΠΌΡ‹ ΠΌΠ½ΠΎΠ³ΠΎ Ρ€Π°Π· ΡΡ‚Π°Π»ΠΊΠΈΠ²Π°Π»ΠΈΡΡŒ с Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°ΠΌΠΈ, Ρ€Π΅ΡˆΠ°ΡŽΡ‰ΠΈΠΌΠΈ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ Π² Ρ‚ΠΎΠΉ ΠΆΠ΅ ΠΌΠ°Π½Π΅Ρ€Π΅. Π§Ρ‚ΠΎΠ±Ρ‹ Ρ€Π΅ΡˆΠ°Ρ‚ΡŒ ΠΈΡ… эффСктивно, Π½ΡƒΠΆΠ½ΠΎ ΠΎΡ‚ΠΎΠΉΡ‚ΠΈ ΠΎΡ‚ эвристичСских ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² ΠΈ ΠΈΠ·ΡƒΡ‡ΠΈΡ‚ΡŒ Ρ‚Π΅ΠΎΡ€ΠΈΡŽ.

ΠŸΠ΅Ρ€Π΅ΠΉΠ΄Π΅ΠΌ ΠΊ основам

Если Π±Ρ‹ Π‘ΠΈΠ»Π» Π±Ρ‹Π» сторонником тСорСтичСского ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π°, Ρ‚ΠΎ процСсс выглядСл Π±Ρ‹ Ρ‚Π°ΠΊ:

  1. Π˜Π΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π·Π°Π΄Π°Π½Π½Ρ‹Π΅ Π²Ρ…ΠΎΠ΄Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅ ΠΈ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ ΠΆΠ΅Π»Π°Π΅ΠΌΡ‹Π΅ Π²Ρ‹Ρ…ΠΎΠ΄Π½Ρ‹Π΅ β€” Π² смыслС ΠΈΡ… свойств: Β«Π£ мСня Π΅ΡΡ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, ΠΊΠ»ΡŽΡ‡Π°ΠΌΠΈ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ ΡΠ²Π»ΡΡŽΡ‚ΡΡ строки, ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‰ΠΈΠ΅ ID, Π° значСниями β€” ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹, ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‰ΠΈΠ΅ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ. Π― Ρ…ΠΎΡ‡Ρƒ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ массив, значСниями ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Π±ΡƒΠ΄ΡƒΡ‚ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ β€” Π½ΠΎ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ зарСгистрированных ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉΒ»
  2. ΠŸΠΎΠ½ΡΡ‚ΡŒ, ΠΊΠ°ΠΊ произвСсти ΠΏΠ΅Ρ€Π΅Π±ΠΎΡ€ Π²Π½ΡƒΡ‚Ρ€ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°: Β«Π― знаю, Ρ‡Ρ‚ΠΎ ΠΌΠΎΠ³Ρƒ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ массив ΠΊΠ»ΡŽΡ‡Π΅ΠΉ Π² ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π΅, Π²Ρ‹Π·Π²Π°Π² Object.keys(). Π― Ρ…ΠΎΡ‡Ρƒ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ массив ΠΏΠΎΡ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ массивы ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ ΠΏΠ΅Ρ€Π΅Π±ΠΎΡ€Β».
  3. ΠžΡΠΎΠ·Π½Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ этот ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ‚ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΊΠ»ΡŽΡ‡ΠΈ, Π° Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ Ρ‚Ρ€Π°Π½ΡΡ„ΠΎΡ€ΠΌΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠ»ΡŽΡ‡ΠΈ Π² значСния, ΠΈ Π²ΡΠΏΠΎΠΌΠ½ΠΈΡ‚ΡŒ ΠΏΡ€ΠΎ map β€” ΠΎΡ‡Π΅Π²ΠΈΠ΄Π½Ρ‹ΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ создания Π½ΠΎΠ²ΠΎΠ³ΠΎ массива ΠΏΡƒΡ‚Ρ‘ΠΌ трансформирования Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ массива:
    Object.keys(usersById).map(id => usersById[id])
  4. Π£Π²ΠΈΠ΄Π΅Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ Ρƒ вас Π΅ΡΡ‚ΡŒ массив ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΡ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ½ΠΎ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ содСрТит Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ значСния, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΎΡ‚Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ΠΎΠ²Π°Ρ‚ΡŒ:
    Object.keys(usersById).map(id => usersById[id]).filter(user => user.registered)

Пойди Π‘ΠΈΠ»Π» этим ΠΏΡƒΡ‚Π΅ΠΌ, ΠΎΠ½ ΠΌΠΎΠ³ Π±Ρ‹ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Ρƒ нас.

ΠŸΠΎΡ‡Π΅ΠΌΡƒ люди Π½Π΅ ΠΏΡ€ΠΈΠ±Π΅Π³Π°ΡŽΡ‚ ΠΊ Ρ‚Π΅ΠΎΡ€ΠΈΠΈ Ρ‡Π°Ρ‰Π΅?

Иногда ΠΎΠ½ΠΈ просто с Π½Π΅ΠΉ Π½Π΅ Π·Π½Π°ΠΊΠΎΠΌΡ‹. Π§Π°Ρ‰Π΅ всСго ΠΎΠ½ΠΈ слишком заняты ΠΈ Π½Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Π½Π°ΠΉΡ‚ΠΈ врСмя, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΠ·ΡƒΡ‡ΠΈΡ‚ΡŒ этот способ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ β€” ΠΈΠΌ просто Π½ΡƒΠΆΠ½ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ всё Ρ€Π°Π±ΠΎΡ‚Π°Π»ΠΎ. Они Ρ€ΠΈΡΠΊΡƒΡŽΡ‚ ΠΏΡ€Π΅Π²Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ этот ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ Π² ΠΏΡ€ΠΈΠ²Ρ‹Ρ‡ΠΊΡƒ, которая станСт прСпятствиСм для развития ΠΈΡ… Π½Π°Π²Ρ‹ΠΊΠΎΠ².

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹Ρ… ошибок, всСгда Π½Π°Ρ‡ΠΈΠ½Π°ΠΉΡ‚Π΅ с Ρ‚Π΅ΠΎΡ€ΠΈΠΈ. На ΠΊΠ°ΠΆΠ΄ΠΎΠΉ стадии процСсса Π·Π°Π΄ΡƒΠΌΡ‹Π²Π°ΠΉΡ‚Π΅ΡΡŒ, с ΠΊΠ°ΠΊΠΈΠΌΠΈ ΠΈΠΌΠ΅Π½Π½ΠΎ Π΄Π°Π½Π½Ρ‹ΠΌΠΈ Π²Ρ‹ ΠΈΠΌΠ΅Π΅Ρ‚Π΅ Π΄Π΅Π»ΠΎ. ВмСсто Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ всё врСмя ΠΏΠΎΠ»Π°Π³Π°Ρ‚ΡŒΡΡ Π½Π° Π·Π½Π°ΠΊΠΎΠΌΡ‹Π΅ ΡˆΠ°Π±Π»ΠΎΠ½Ρ‹, ΡƒΡ‡ΠΈΡ‚Ρ‹Π²Π°ΠΉΡ‚Π΅ ΠΏΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ²Π½Ρ‹Π΅ Ρ‚ΠΈΠΏΡ‹ Π΄Π°Π½Π½Ρ‹Ρ…: массив, ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, строка ΠΈ Ρ‚.Π΄. ΠŸΡ€ΠΈ использовании Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈΠ»ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° ΠΎΠ±Ρ€Π°Ρ‰Π°ΠΉΡ‚Π΅ΡΡŒ ΠΊ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Ρ‚ΠΎΡ‡Π½ΠΎ Π·Π½Π°Ρ‚ΡŒ, ΠΊΠ°ΠΊΠΈΠ΅ Ρ‚ΠΈΠΏΡ‹ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΡ… ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚, ΠΊΠ°ΠΊΠΈΠ΅ ΠΎΠ½ΠΈ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°ΡŽΡ‚ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹ ΠΈ ΠΊΠ°ΠΊΠΎΠΉ получаСтся Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚.

Π‘ Ρ‚Π°ΠΊΠΈΠΌ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΎΠΌ Π²Ρ‹ смоТСтС Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒ Ρ€Π°Π±ΠΎΡ‡Π΅Π΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ с ΠΏΠ΅Ρ€Π²ΠΎΠΉ ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠΈ. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π±Ρ‹Ρ‚ΡŒ ΡƒΠ²Π΅Ρ€Π΅Π½Ρ‹ Π² Π΅Π³ΠΎ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΡΡ‚ΠΈ, вСдь Π²Ρ‹ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎ ΠΏΠΎΠ΄Π±ΠΈΡ€Π°Π»ΠΈ свои дСйствия, ΠΎΡΠ½ΠΎΠ²Ρ‹Π²Π°ΡΡΡŒ Π½Π° Π·Π°Π΄Π°Π½Π½Ρ‹Ρ… Π²Ρ…ΠΎΠ΄Π½Ρ‹Ρ… ΠΈ ΠΆΠ΅Π»Π°Π΅ΠΌΡ‹Ρ… Π²Ρ‹Ρ…ΠΎΠ΄Π½Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ…. Π’Π½ΠΈΠΊΠ°ΠΉΡ‚Π΅ Π² основы ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ (Ρ‚ΠΈΠΏΡ‹ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΡ‹Π΅ значСния), Π° Π½Π΅ Ρ€Π°Π·ΠΌΡ‹Ρ‚Ρ‹Π΅ бизнСс-Ρ„ΠΎΡ€ΠΌΡƒΠ»ΠΈΡ€ΠΎΠ²ΠΊΠΈ (Π²Ρ€ΠΎΠ΄Π΅ «зарСгистрированных ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉΒ»).

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ: habr.com

Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ