-1
var s = [23, 65, 98, 5];

Array.prototype.myMap = function (callback) {
  var newArray = []; 
  this.forEach(function (a) {
    return newArray.push(callback(a));
  }); 
  return newArray;
};

var new_s = s.myMap(function (item) {
  return item * 2;
});

myMap是我们定义的一个函数,它有一个callback 内部调用的参数myMap是一个forEach在每个数组元素上执行一次函数的函数。是这条线我不明白

return newArray.push(callback(a));

所以push()newArray

MDN push() : - https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/push

push()只接受一个参数。那么为什么我们有.push(callback(a))为什么不只是.push(a)呢?

4

3 回答 3

1

但是 push() 只接受一个参数。那么为什么我们有 .push(callback(a))

的返回值callback(a) 只有一个参数。

为什么不只是 .push(a)?

映射的重点是获取一个数据数组并创建一个新数组,其中每个项目都以某种方式进行转换。

如果你没有a通过回调函数,它就不会被转换,你只是在做一个浅拷贝。

于 2019-11-28T14:50:35.897 回答
0

语法push(callback(a))表示:

  • push()它本身接受一个参数,一个回调,它......
  • ...自动传递一个参数(迭代数组项)
于 2019-11-28T14:51:09.857 回答
0

callback(a)在这种情况下确实是一个对象或参数。会将调用的push结果推callback(a)送到数组。它实际上与此相同:

var item = callback(a);
newArray.push(item);

但是您callback直接推送结果,而不是先将其存储在变量中。

于 2019-11-28T14:53:43.360 回答