我是一个初学者,我仍在努力理解一些概念。我基本上必须使用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
的情况下,它将函数"映射"到数组中的每个值上。