Page 167 - Браун Э. - Изучаем JavaScript. Руководство по созданию современных веб-сайтов - 2017
P. 167

1 1   ]

       / /   (далее  для  краткости  мы  выводим  только  длину)

       / /  получить  все  бубны:
       cards . f ilter ( c   =>  c . suit   ' D  ' ) ;    1 1   длина :  13

       / /  получить  все  фигуры
       cards . f ilter ( c   =>  c . v a l ue  >  1 0 ) ;   1 1   длина :  12

       / /  получить  все  червовые  фигуры
       cards . f ilter ( c   =>  c . v alue  >  1 0   & &   c  . suit  ===  ' Н  ' ) ;    / /  длина :  3
          Полагаю, вы начали понимать, как методы map и  filter могут быть объединены
       для получения интересного эффекта. Скажем, например, мы хотим создать краткое
       строковое представление карт в  нашей  колоде.  Мы будем  использовать символы
       Юникода для мастей и буквы "Р\.',  "J", "Q" и  "К" для обозначения туза и фигур. По­
       скольку создающая функция довольно длинна, мы создадим ее отдельно и не будем
       пытаться использовать анонимную функцию.

       function  cardToString ( c )
                                                   3
           const  suits  =  {  ' Н  ' :  ' \ u2665 ' ,    ' С  ' :  ' \ u2 66 ' ,    ' D  ' :  ' \ u2 6 6 6  ' ,    ' S  ' :  ' \ u2 660 '
       } ;
           const  values  =  {  1  :    ' А  ' ,  1 1 :    ' J  ' ,   1 2 :    ' Q  ' ,  1 3 :    ' К  '   } ;
           / /   создание  ма ссива  значений  при  каждом  вызове  функции  cardToString
           / /  не  очень  эффективно;  попробуйте  найти  лучшее  решение
           for ( l et  i=2 ;  i<=l O ;   i++)  valu s [ i )   =  i ;
                                       e
           return  values [ c . v a l ue ]  +  suits [ c . s ui ] ;
                                              t

       / /  получить  в с е  карты  со  значением  2 :
       cards . f ilter ( c   = >   c . v a l ue  ===  2 )
           . m ap ( c ardToString ) ;   1 1   [  «2'1 »,  «2• »,  «2+ »,  «2• »  ]

       / /  получить  все  червовые  фигуры
       cards . f i l ter ( c   =>  c . v alue  >  1 0   & &   c  . suit  ===  ' Н  ' )
           . m ap ( cardToStrin ) ;   / /   [  «J'I » ,   «Q'I »,  «K'I »
                          g

           r
       Ма ия массивов: метод            reduce
          Из всех методов массивов мой любимый - reduce. В то время как map преобразу­
       ет каждый элемент в  массиве, метод reduce преобразует весь массив. Он называется
       reduce потому, что зачастую используется для сведения (reduce) массива к единому
       значению. Например, суммирование чисел, хранящихся в массиве, или вычисление их
       среднего являются способами свести массив к единому значению. Однако фактически



       1 6 8    Глава 8. Массивы и их обработка
   162   163   164   165   166   167   168   169   170   171   172