JavaScript中二维数组的forEach()和Apply()方法

JavaScript中二维数组的forEach()和Apply()方法,javascript,arrays,multidimensional-array,foreach,Javascript,Arrays,Multidimensional Array,Foreach,我有一个数组,它的元素也是数组,每个数组包含三个元素。我想使用forEach()方法为我的主数组的每个元素调用函数calcMe(a,b,c){…},但我真的很困惑,不知道如何让它工作 arr = [[1,5,4], [8,5,4], [3,4,5], [1,2,3]] function calcMe(a,b,c){...} arr.forEach(calcMe.Apply(-----, -----)); 如何使用Apply()将每个内部数组元素作为参数传递给函数?您需要为其提供函数。该函数将在

我有一个数组,它的元素也是数组,每个数组包含三个元素。我想使用
forEach()
方法为我的主数组的每个元素调用
函数calcMe(a,b,c){…}
,但我真的很困惑,不知道如何让它工作

arr = [[1,5,4], [8,5,4], [3,4,5], [1,2,3]]
function calcMe(a,b,c){...}
arr.forEach(calcMe.Apply(-----, -----));

如何使用
Apply()
将每个内部数组元素作为参数传递给函数?

您需要为其提供函数。该函数将在主数组的每个元素上运行

根据
calcMe
的功能,您可能需要在
calcMe.apply
中为其提供正确的上下文。的第一个图形是上下文(
this
函数中的关键字)。我只是把
设为null
,但您可以传递适合您的内容

var arr = [[1,5,4], [8,5,4], [3,4,5], [1,2,3]];
function calcMe(a,b,c){
    console.log(a, b, c);
}
arr.forEach(function (params) {
    calcMe.apply(null, params);
})
如果您愿意使用ES6,您可以使用和:


首先,
calcMe
似乎不返回函数,因此不能将其返回值传递给
forEach

我猜你想要像这样的东西

var-arr=[
[1, 5, 4],
[8, 5, 4],
[3, 4, 5],
[1, 2, 3]
]
函数计算(a、b、c){
var pre=document.getElementById('pre')
pre.innerHTML+='calcMe参数:'+a+“,“+b+”,“+c+”
”; } arr.forEach(函数(el,索引){ //也可以使用'arr[index]`而不是el 计算应用(本,el); });
您可以提供lambda函数

arr.forEach((u)=>{console.log(calcMe.apply(null, u))});

如果不需要访问对象上下文,则可以将
null
绑定到第一个参数。否则,请绑定所需的对象。

apply
立即调用函数,因此不能直接使用它,因为
forEach
需要函数引用。但是,您可以使用
apply
上的
bind
来实现您想要的:

arr.forEach(Function.apply.bind(calcMe, void 0));
第二个参数将是
值。您可以提供任何值,而不是
void 0

var-arr=[[1,5,4]、[8,5,4]、[3,4,5]、[1,2,3];
函数计算(a、b、c){
document.querySelector('pre').textContent+=[a,b,c]+'\n';
}
arr.forEach(Function.apply.bind(calcMe,void 0))
如果您感兴趣,这里是最快、最优雅的解决方案

“严格使用”;
设arr=[
[1, 5, 4],
[8, 5, 4],
[3, 4, 5],
[1, 2, 3]
];
函数计算(a、b、c){
document.querySelector('p').innerHTML+=`${a},${b},${c}
`; } 用于(arr的let项目){ 计算费用(…项); } //或 arr.forEach(item=>calcMe(…item))

请添加一些示例,说明这应该如何工作。您不能通过数组和地址
a
b
c
作为
函数calcMe(arr){a=arr[0],b=arr[1]
等。函数calcMe(a,b,c)应该取1,5,4,然后取8,5,4等等作为参数,但
arr[index]
正是
el
。您使用索引是否比el(元素引用)更准确,有什么特殊原因吗在forEach回调中?@Mic没有特别的原因,澄清了答案谢谢,效果很好。我刚刚开始学习javascript,并不真正理解forEach内部的函数,它如何准确地获取主函数的索引array@jacqui_g使用三个参数调用传递给它的函数:第一个是中的当前元素数组,第二个是索引,第三个是被迭代的数组。我从来没有听说过
函数。apply
函数。call
,只有@JuanMendes因为
函数
是函数,它继承自
函数。prototype
。所以
函数。apply
函数。prototype.app的快捷方式ly
。因此,为了澄清,
函数.apply.bind(calcMe,void 0)
与执行
Function(){calcMe.apply(null,arguments)}
calcMe.apply.bind(calcMe)
函数.apply.bind(calcMe,void 0)
calcMe.apply.bind(calcMe,void 0)相同
因为
Function.apply===calcMe.apply
。它几乎与
Function(subar){calcMe.apply(void 0,subar)}相同
,不同之处在于格式者将附加参数传递给
apply
,这些参数会被忽略。@jacqui\g基本上,您可以选择是绑定
应用
还是将其包装到函数表达式中。您不能做的是直接调用
apply
arr.forEach(Function.apply.bind(calcMe, void 0));