Написал функцию, которая заменяет элементы строки, через forEach и явно объявленный массив - все ок. Почему через map, возвращает 2 массива?

let str = 'abc def def lom abc abc def';

function replaceAll(find, replace, str) {
  let array = str.split(' ');
  array.map(element => {
    element === find ? array.push(replace) : array.push(element);
  });
  return array
};

console.log(replaceAll('abc', 'x', str));


Ответы (1 шт):

Автор решения: Алексей Шиманский

Строка:

let array = str.split(' ');  

В array будет лежать массив элементов.

Далее:

array.push(...

тут заносим элементы в переменную array, которая УЖЕ существует, которая объявлена строкой выше и в которой УЖЕ существуют данные.


Если вам надо поменять что-то, то вам надо в элементе (element) менять, а не делать push. И возвращать результат работы map

И ещё одна ошибка: Если в стрелочной функции имеется тело или оборачивается в фигурные скобки, то надо принудительно писать return иначе функция внутри map ничего не вернёт...точнее вернёт сплошные undefined

→ Ссылка