我可以给 JavaScript 的 map() 回调函数传递额外的参数吗?

17

我有一个数组,现在我想在数组中的每个元素上执行一个函数。

我尝试使用 map() 函数。问题是,我传递给 map() 的回调函数有自己的参数(不是element, index, array)。

我能否向这样的回调函数传递参数?如何实现?


2
你的意思是什么?map((elm, index) => { func(params); }) - Andrew Li
你可以在回调函数上使用bind()方法,在回调函数之前添加参数。比如,你的函数将会有一个像(arg1, arg2, /*etc*/, element, index, array)这样的参数列表。 - Patrick Evans
2个回答

31

我可以想到两种不同的方法:

使用thisArg将选项对象设置为回调函数中的this值:

var numbers = [1,2,3,4,5,6,7,8,9,10];

function callback(element) {
  return element + this.add;
};

var mapped = numbers.map(callback, {
  add: 10
});

console.log(mapped);

使用.bind()设置一些参数:

var numbers = [1,2,3,4,5,6,7,8,9,10];

function callback(add, element) {
  return element + add;
};

var mapped = numbers.map(callback.bind(null, 10));

console.log(mapped);


1
谢谢。我这周刚开始学习JavaScript。据我所知,这是一个函数的环境。对于第一个解决方案,我认为你正在将一个this对象传递给回调函数。这个this指的是什么? - jinglei
1
@Jinglei.Y 通常 this 用于引用函数作为方法调用的对象。数组 map 方法允许指定 this 对象,因为它不是将函数作为方法调用,所以这非常有用。在这种情况下,我只设置了一个特定的 this 值,即我的自己的对象。这个问题更详细地介绍了 this 对象:“this” 关键字如何工作? - Alexander O'Mara
我更喜欢第一种解决方案,因为它避免了使用 bind,这对我来说有点不太正规。每种方法的优缺点是什么? - Daniel

0

我认为你可能需要在另一个回调函数中包装你的原始函数,像这样:

var array = ['one', 'two', 'skip-a-few', 'three', 'four']

console.log(
    array.map(function (element) {
        return original('other', 'variables', element)
    })
)


// this function doesn't matter, just an example
function original(a, b, c) {
    return a + ' ' + b + ' ' + c
}


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接