2017-03-07 60 views
1

例如:爲什麼aryB.forEach(aryA.push.bind(aryA))不能在JavaScript中工作?

> 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]] 

是的,我要的元素複製從aryBaryA。當然,我有其他的解決方案,但爲什麼這種方法不工作?
請原諒,如果這是一個重複的問題。我是一個Stackoverflow新手。

回答

2

那麼,它確實「工作」。 .forEach將三個參數傳遞給回調:

  1. 當前陣列元件
  2. 當前陣列元件
  3. 數組本身(即.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

+0

非常感謝! – enzeberg

相關問題