使用for循环的Array.prototype.map的等效实现

时间:2019-03-19 03:16:52

标签: javascript array.prototype.map

我正在尝试使用“ 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)));)

0 个答案:

没有答案