如何使用for循环实现map()函数?

时间:2019-01-22 16:27:12

标签: javascript function callback

我是一个初学者,但我仍在尝试理解一些概念。我基本上必须使用for循环来重写map()函数的行为。

作为一门课程的练习,已经为我提供了部分代码:

// 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);

我这样想:map是一个函数,函数以参数为参数,因此括号中的“回调”必须是一个函数,并且其目标是对我需要的数组的每个元素执行该函数确实是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 :(得分:3)

您需要使用当前值为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);

答案 1 :(得分:1)

您快到了:

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,它将“函数”映射到数组内的每个值。