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



我是一个初学者,我仍在努力理解一些概念。我基本上必须使用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()函数的数组,但我不确定它在逻辑上是否正确。然后,我将使用"callback"函数对循环中的实际元素给出的结果推入数组。

不幸的是,结果是一个空字符串数组。

这就是控制台向我展示的内容:

,,,

提前谢谢你,希望你能帮我弄清楚

您需要调用当前值为this[i]callback

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

您几乎做到了:

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的情况下,它将函数"映射"到数组中的每个值上。

最新更新