Создать функцию map с учетом уже имеющейся функции forEach
В задании необходимо создать функцию map с учетом уже имеющейся функции forEach. Когда передается function (el) { return el * 2; } в функцию forEach каждый элемент умножается на 2, но сам forEach не возвращает каждый элемент умноженный на 2. Не могу понять, где ошибка.
function forEach(arr, func){
for(let el of arr){
func(el);
}
}
function map(arr, func){
let res;
let result = [...arr];
res = result.push(forEach(result, func));
console.log(result);
}
map([1, 2, 3, 4, 5], function (el) { return el * 2; });
Ответы (1 шт):
Map делает копию массива, в которую помещает результат обработки каждого элемента исходного массива.
forEach занимается обработкой исходного массива, применяя переданную функцию к каждому элементу. Поэтому можно просто передать forEach функцию (callback), которая будет помещать результат действия функции, переданной в map, над каждым элементом исходного массива.
Таким образом, изначальный массив остается неизмененным, а map возвращает новый массив элементов, над каждым из которых была произведена операция переданной в map функцией (callback).
Здесь надо понимать, что массивы передаются в функции по ссылке. Поэтому, когда мы передаем пустой массив result в функцию-коллбэк forEach, то любые изменения с ним отражаются и здесь, внутри map. И наоборот, передавая arr в качестве аргумента в forEach, каждый элемент этого массива (будучи примитивными) передается в коллбэк по значению и на этот массив никак не отражается.
function forEach(arr, func){
for(let el of arr){
func(el);
}
}
function map(arr, func){
const result = [];
forEach(arr, el => {
result.push(func(el));
})
return result;
}
let array = [1,2,3,4,5];
let mapped_array = map(array, el => el*2);
console.log('Initial array: ', array);
console.log('Mapped array: ', mapped_array);