我正在尝试扩展Array.prototype以包含一个square函数。我有这个:
Array.prototype.square = function(){
return this.forEach(function(el){
return (el * el)
});
}
当我在数组上调用此函数时,请说arr = [2, 2, 2]
它返回undefined。如果我在那里添加一个console.log,我可以看到forEach函数的回调函数正确执行 - 它记录4次三次。为什么这个函数返回undefined而不是[4,4,4]的新数组?
答案 0 :(得分:6)
Array.prototype.square = function(){
return this.map(function(el){
return (el * el)
});
}
console.log([2, 2, 2].square()); // [4, 4, 4]
答案 1 :(得分:2)
如p.s.w.g.说,.map
是适当的功能,但在评论中,您询问使用forEach
。要使其工作,您必须创建一个临时数组:
Array.prototype.square = function(){
var tmp = [];
this.forEach(function(el){
tmp.push(el * el)
});
return tmp;
}
console.log([2, 2, 2].square()); // [4, 4, 4]
不过, .map()
更好。