我是一个初学者,但我仍在尝试理解一些概念。我基本上必须使用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()函数的数组,但是我不确定它在逻辑上是正确的。然后,我将使用“回调”函数对循环中的实际元素给出的结果推入数组。
不幸的是,结果是一个空字符串数组。
这是控制台向我显示的内容:
,,,
预先感谢您,希望您能帮助您解决
答案 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
,它将“函数”映射到数组内的每个值。