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

Вы можете задаваться вопросом  "Как работает l c Names? Этот случай  выглядит
       не так, как другие': Все обсуждаемые здесь методы, которым передаются функции,
       включая map, не заботятся о том, в каком виде им передается эта функция. В случаях
       names, prices и discountPrices мы создаем собственную функцию (используя стре­
       лочную нотацию). Для  l c Names мы используем функцию, которая уже существует,
       String . toLowerCase. Этой функции передается один строковый аргумент, а она воз­
       вращает строку в нижнем регистре. Мы легко могли бы написать names . map (х  =>
       х  .   toLowerCase ( ) ) , но  важно понимать, что  функция  - это функция, независимо
       от того, какую форму она принимает.
          Передаваемая в качестве параметра функция вызывается для каждого элемента.
       Ей передаются три аргумента: сам элемент, его индекс в массиве и сам массив (ко­
       торый редко полезен). Рассмотрим пример, в котором имеются наши товары и соот­
       ветствующие цены в двух отдельных массивах, а мы хотим объединить их.

       const  items  =  [ " Widg t " ,  "Gadget" J ;
                          e
       const  prices  =  [ 9 . 9 5 ,   22 . 9 5 ) ;
       const  cart  =  items . m ap (  ( x ,   i )   =>  ( {   name :  х,  price :  prices [ i ] }  ) ) ;
       1 1   cart :  [ (  пате :  "Widg t " ,   price :  9 . 95  } ,  (  п  ате :  "Gadg t " ,   price :  22 . 9 5  } ]
                             e
                                                            e
          Этот пример немного сложнее, но в нем демонстрируется вся мощь функции map.
       Здесь, мы используем не только сам элемент (х), но и его индекс (i). Индекс необхо­
       дим потому, что мы хотим соотнести элементы в массиве i tems с элементами в мас­
       сиве prices согласно их индексу. Здесь метод map преобразует массив строк в массив
       объектов, извлекая информацию из отдельных массивов.  (Обратите внимание, что
       мы должны заключить объект в круглые скобки; без круглых скобок стрелочная но­
       тация примет фигурные скобки за обозначение блока.)
          Метод filt r , как и подразумевает его имя, предназначен для удаления всего не­
                     e
       желательного из массива. Как и map, после удаления элементов он возвращает новый
       массив. Какие элементы удаляются? Это снова полностью ваше дело. Если вы догада­
       лись, что для определения удаляемых элементов мы предоставляем функцию, то вы
       уловили суть. Давайте рассмотрим несколько примеров.
       1 1   создать  колоду  игральных  карт
       const  cards  =  ( ] ;
       for ( l et  suit  of  [ ' Н  ' ,  ' С  ' ,  ' D  ' ,    ' S  ' ]  )   1 1   червы,  трефы,  бубны,  пики
                         l
           for ( l et  value= ;   value<=l З ;   value++ )
               cards . p ush ( {   suit ,  value  } ) ;
       1 1   получить  все  карты  со  значением  2  :
       cards . f ilter ( c   =>  c . v alue  ===  2 ) ;  1 1   [
                                        1 1   (  sui t :    ' Н '  '  value:  2  } '
                                                   '
                                        1 1   (  sui t :    С '  '  value:  2  } '
                                        1 1   (  s u i t :    'D , '  value:  2  } '
                                        1 1   (  sui t :    ,  s , ,  value:  2  }



                                    Фундаментальные операции над массивом: map и filter   1 6 7
   161   162   163   164   165   166   167   168   169   170   171