Я прошел 30 дней Javascript в LeetCode. На данный момент у меня 2635. Примените преобразование к каждому элементу массива.

Вызов

Вам дан целочисленный массив arr и функция отображения fn. Ваша задача — создать новый массив, каждый элемент которого является результатом применения функции преобразования к соответствующему элементу входного массива. Другими словами, returnArray[i] = fn(arr[i], i).

Первая попытка

На первый взгляд задача была простой. Мне просто нужно было сделать то, что написано ниже:

var map = function(arr, fn) {
//map applied fn to each iteam in the array
  return arr.map(fn); //returning arr.map(fn)
};

Однако, прочитав дальше, я понял, что вы не можете использовать метод Array.map. Поэтому мне пришлось подумать о том, как создать собственную реализацию для сопоставления элементов массива, чтобы решить эту проблему. Подумав, я понял, что мне понадобится цикл, который проходит по массиву и помещает все элементы в новый массив. Помещение элементов в новый массив было важно, потому что именно это и делает метод Array.map.

В моей первой попытке я сделал вот что:

  1. Я начал с определения пустого массива с именем result. В конечном итоге этот массив стал хранить наши элементы.
  2. Я добавил for loop для перебора введенного массива arr. Переменная цикла i была объявлена ​​для представления текущего индекса массива.
  3. Внутри цикла я добавил функцию fn к текущему элементу arr[i] .
  4. Затем я сохранил значение в переменной под названиемreturnedArray.
  5. Затем я отправил массив returnedArray, который содержит все значения!
/**
 * @param {number[]} arr
 * @param {Function} fn
 * @return {number[]}
 */


var map = function(arr, fn) {
  let result = []; 

  for (let i = 0; i < arr.length; i++) 
  {
    let returnedArray = fn(arr[i]); 
    result.push(returnedArray);
  }
  return result; 
  
};

Однако после отправки кода на LeetCode я понял, что он работает только для двух тестовых случаев!!! Это заставило меня тупо смотреть на экран и выпить кофе, чтобы облегчить мое разочарование.