This question already has answers here:
Array forEach pass “push” as argument
                                
                                    (2个答案)
                                
                        
                                2年前关闭。
            
                    
例如:

> var aryA = [];
undefined
> var aryB = [1, 2, 3];
undefined
> aryB.forEach(aryA.push.bind(aryA));
undefined
> aryA
[1, 0, Array[3], 2, 1, Array[3], 3, 2, Array[3]]


是的,我想将元素从aryB复制到aryA。当然,我还有其他解决方案,但是为什么这种方法不起作用?
如果这是重复的问题,请原谅。我是Stackoverflow的新手。

最佳答案

好吧,它确实“有效”。 .forEach将三个参数传递给回调:


当前数组元素
当前数组元素的索引
数组本身(即调用了.forEach的数组)


由于您将push作为回调传递,因此您基本上在每次迭代中执行以下调用:

aryA.push(aryB[i], i, aryB);


即向数组添加三个值,这正是您看到的结果:

[1, 0, Array[3], 2, 1, Array[3], 3, 2, Array[3]]
 ^  ^  ^         ^  ^  ^
 |  | array      |  |  array
 | 1. index      | 2. index      ...
1. element      2. element




我想您只是想推送第一个参数,在这种情况下,您必须仅将第一个参数传递给调用.push的函数。

关于javascript - 为什么aryB.forEach(aryA.push.bind(aryA))在JavaScript中不起作用? ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/42642563/

10-12 13:18