Метад map
Метад map
дазваляе ўжыць зададзеную
функцыю для кожнага элемента масіва. Пры
гэтым метад не змяняе зыходны масіў, а
вяртае зменены.
Метад у параметры атрымлівае функцыю, якая
выканаецца для кожнага элемента масіва.
Тое, што верне гэтая функцыя праз return
для элемента масіва, стане новым значэннем
гэтага элемента (гл. прыклады).
У функцыю можна перадаваць 3
параметры.
Калі гэтыя параметры ёсць (яны не абавязковыя),
то ў першы аўтаматычна трапіць элемент
масіва, ў другі трапіць яго нумар у масіве
(індэкс), а ў трэці - сам масіў.
Сінтаксіс
let новы масіў = масіў.map(function(элемент, індэкс, масіў) {
код
return зменены элемент;
});
Прыклад
Стварым масіў, кожны элемент якога ўдвойчы большы за адпаведны элемент пачатковага масіва:
let arr = [1, 2, 3, 4, 5];
let res = arr.map(function(elem) {
return elem * 2;
});
console.log(res);
Вынік выканання кода:
[2, 4, 6, 8, 10]
Прыклад
Стварым масіў, кожны элемент якога атрымліваецца так - значэнне элемента множыцца на яго парадкавы нумар у масіве:
let arr = [1, 2, 3, 4, 5];
let res = arr.map(function(elem, index) {
return elem * index;
});
console.log(res);
Вынік выканання кода:
[0, 2, 6, 12, 20]
Прыклад
Пры неабходнасці ў трэці параметр можна перадаць сам масіў:
let arr = [1, 2, 3, 4, 5];
let res = arr.map(function(elem, index, arr) {
тут будзе даступны масіў arr
});
Прыклад
Метад map
можна выкарыстоўваць і для
перабору шматмерных масіваў. Хай, напрыклад,
дадзены вось такі масіў:
let arr = [[1, 2, 3], [4, 5, 6], [7, 8, 9]];
Давайце перабяром гэты масіў праз
map
і вывядзем яго элементы ў кансоль:
let arr = [[1, 2, 3], [4, 5, 6], [7, 8, 9]];
let result = arr.map(function(elem) {
console.log(elem);
});
У выніку console.log
вывяде [1,
2, 3]
, потым [4, 5, 6]
, потым
[7, 8, 9]
.
Як вы бачыце, у зменную elem
трапляюць
падмасівы. Давайце цяпер ужыем метад
map
да кожнага падмасіва і возьмем
кожны яго элемент у квадрат:
let arr = [[1, 2, 3], [4, 5, 6], [7, 8, 9]];
let result = arr.map(function(elem) {
return elem.map(function(num) {
return num * num;
});
});
console.log(result);