Как написать функцию, которая мутирует и возвращает массив?

Всем здравствуйте, надо написать две функции, одна находит все элементы массива arr, равные el, и возвращает новый массив, в котором на месте найденных значений стоит replaceEl; а вторая делает то же самое, только мутирует входящий массив и возвращает его же Пробовал так:

function replaceElClear(arr, el, replaceEl) {
     let result = [];
     for(let i = 0; i < arr.length; i++) {
          if(arr[i]===el) {
               result.push(replaceEl) ;
          } else {
  result.push(arr[i]);
}
    }                                                        
        return result;} ;            
replaceElClear([1,2,3,4,2], 2, 'a');

function replaceElMutate(arr, el, replaceEl) {
     let result = [];
     for(let i = 0; i < arr.length; i++) {
          if(arr[i]===el) {
               result.splice(replaceEl) ;
          } else {
  result.splice(arr[i]);
}
     }
        return result;} ;            
replaceElMutate([1,2,3,4,2], 2, 'a');

Первая часть проходит тест нормально, а вторая мутацию не дает. Что не так делаю?


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

Автор решения: Виктор

Такой вариант:

function replaceElClear(arr, item, replaceEl) {

     return arr.map( p => p === item ? replaceEl : p );
}

function replaceElMutate(arr, item, replaceEl) {

     for(let i = 0; i < arr.length; i++) {
          arr[i] = arr[i] === item ? replaceEl : arr[i];
    }                                                        
    return arr;
}

let arr = [1,2,3,4,2];
let arr2 = replaceElClear(arr, 2, 'a');
console.log(arr, arr2);

arr = [1,2,3,4,2];
arr2 = replaceElMutate(arr, 2, 'a');
console.log(arr, arr2);

Вывод:

[ 1, 2, 3, 4, 2 ] [ 1, 'a', 3, 4, 'a' ]
[ 1, 'a', 3, 4, 'a' ] [ 1, 'a', 3, 4, 'a' ]
→ Ссылка