我正在尝试使用“ for循环”实现等效于Array.prototype.map的map版本,但最终效果相似,这给了我一些不同之处。
我的代码如下:
// the global Array
1. var s = [23, 65, 98, 5];
2. Array.prototype.myMap = function(callback){
3. var newArray = [];
4. console.log(this); // prints 23,65,98,5 which is correct
5. for(let element in this){
6. console.log(this[element]); // this line and the push doesn't work well
7. newArray.push(callback(this[element]));
8. console.log("element: " + newArray);
9. }
10. console.log("final: " + newArray);
11. return newArray;
12. };
13. var new_s = s.myMap(function(item){
14. return item * 2;
15. });
`
代码输出如下:
23,65,98,5
23
elem: 46
65
elem: 46,130
98
elem: 46,130,196
5
elem: 46,130,196,10
function (callback) {
var newArray = [];
window.__console.log(this);
for (var element in this) {
window.__console.log(this[element]);
newArray.push(callback(this[element]));
window.__console.log("elem: " + newArray);
}
window.__console.log("final: " + newArray);
return newArray;
}
elem: 46,130,196,10,NaN
final: 46,130,196,10,NaN
如果您看到的话,由于添加了函数(回调),最后一个数组正在打印NaN,但是奇怪的是,在声明newArray的行之后,我正在记录“ this”(第4行),该函数(回叫)未添加。有人可以解释发生了什么,为什么要添加吗? 如果不是for循环,我添加了forEach循环,它可以正常工作,仅对于for循环,它的行为很奇怪。 (this.forEach(a => newArray.push(callback(a)));)