Написать функцию, которая возвращает преобразованный массив на основе функции, переданной в качестве параметра

я должна написать функцию, которая принимает два аргумента. Первый — исходный массив чисел, второй аргумент — callback-функция, которая будет вызываться при переборе элементов массива.

 map([3, 6, 9], function(el) { return el + 3; }) // returns [6, 9, 12]
 map([1, 2, 4, 7], function (el) { return el * 2; }) // returns [2, 4, 8, 14]

я добавила функцию которая бужет перебирать масив, но не понию как ето сложить все вместе

function map(arr, function) {

  function forEach(arr) {
    let result = '';
    for (const item of arr) {
      result += item + ' '
    }
    return result;
  }


}
console.log(map([2, 5, 8], function (el) { return el * 2; }));

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

Автор решения: Yakov Botov

предлагаю вот такой вариант

function map(arr, callback) {
  const acc = []
  for(let item of arr) {
   acc.push(callback(item))
  }

  return acc
}

ссылка на sandbox: https://codesandbox.io/s/gallant-mahavira-i709qd?file=/src/index.js:74-145

→ Ссылка
Автор решения: Михаил Камахин

В данном случае у функции myMap this - это массив, от которого вызывается функция myMap.

Функция map принимает 4 параметра -

  • currentValue - Текущий обрабатываемый элемент массива
  • index - Индекс текущего обрабатываемого элемента в массиве
  • array - Массив, по которому осуществляется проход
  • thisArg - Необязательный параметр. Значение, используемое в качестве this при вызове функции callback

Array.prototype.myMap = function(callback) {
  const newArr = [];
  
  for (let i = 0; i < this.length; i++) {
    const resultItem = callback(this[i], i, this, this);
    newArr.push(resultItem);
  }
  
  return newArr;
};

console.log([1, 2, 3].myMap(item => item * 2));
console.log([4, 5, 6].myMap((item, i) => i * 5));

→ Ссылка