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

