Как реализовать функцию map () с помощью цикла for? - PullRequest
0 голосов
/ 22 января 2019

Я новичок и все еще пытаюсь понять некоторые концепции. Я в основном должен переписать поведение функции map () с помощью цикла for.

Будучи упражнением с курса, мне уже была предоставлена ​​часть кода:

// the global Array
var s = [23, 65, 98, 5];

Array.prototype.myMap = function(callback){
  var newArray = [];
  // Add your code below this line



  // Add your code above this line
  return newArray;
};

var new_s = s.myMap(function(item){
  return item * 2;
});
console.log(new_s);

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

так вот что я написал:

Array.prototype.myMap = function(callback){
    var newArray = [];
    // Add your code below this line
        for(let i = 0; i < this.length; i++){
           newArray.push(this[i].callback);
        } 
    // Add your code above this line
    return newArray;
  }

Я в основном поставил цикл for, где «this» должен быть массивом, который использует функцию map (), но я не уверен, что это логически правильно. Затем я поместил в массив результат, полученный с помощью функции «обратного вызова» для фактического элемента в цикле.

К сожалению, результатом является массив пустых строк.

Вот что показывает консоль:

,,,

Заранее спасибо, надеюсь, вы поможете разобраться

Ответы [ 2 ]

0 голосов
/ 22 января 2019

Ты почти там:

Array.prototype.myMap = function(callback){
    var newArray = [];
    // Add your code below this line
        for(let i = 0; i < this.length; i++){
           newArray.push(callback(this[i]));
        } 
    // Add your code above this line
    return newArray;
  }
  
  
console.log([1, 2, 3].myMap(function (num) { return num + 2; }));

Цель map - проецировать функцию на значение. В случае Array он «отображает» функцию на каждое значение в массиве.

0 голосов
/ 22 января 2019

Вам необходимо вызвать callback с текущим значением this[i].

var s = [23, 65, 98, 5];
Array.prototype.myMap = function(callback){
    var newArray = [];
    // Add your code below this line
        for(let i = 0; i < this.length; i++){
           newArray.push(callback(this[i])); //pass the value of this[i] to the callback function.
        } 
    // Add your code above this line
    return newArray;
  }
var new_s = s.myMap(function(item){
  return item * 2;
});
console.log(new_s);
...