2016-07-09 29 views
1

我玩弄JavaScript的數組原型圖,我不明白爲什麼我得到以下值:JavaScript的數組映射原型有點偏離?

console.log(
    [1,2,2,5,6].map(function(a,b){ 
     return a+b; 
    }) 
); /*This returns [ 1, 3, 4, 8, 10 ]*/ 

應該不是上面的代碼返回[1,3,4,7,11 ]?

這是另一個片段,它顯示數組中的元素是按順序添加的,並且至少我相信是正確的。

console.log(
    [1,2,3,4,5,6].map(function(a,b){ 
     return a+b; 
    }) 
); /*[ 1, 3, 5, 7, 9, 11 ]*/ 

這只是一個奇怪的問題,更多地沿着爲什麼代碼的第一個代碼片段的原因。

+0

這是語法array.map(function(currentValue,index,arr),this) –

+1

你是如何得到'[1,3,4,7, 11]'??? – Bergi

+0

@Bergi「添加索引-1的值,如果它們存在」 –

回答

4

讓我們的總和:

[1, 2, 2, 5, 6] // Your values 
+ [0, 1, 2, 3, 4] // Indices 
----------------- 
    [1, 3, 4, 8,10] // Result 
[1, 2, 3, 4, 5, 6] // Your values 
+ [0, 1, 2, 3, 4, 5] // Indices 
-------------------- 
    [1, 3, 5, 7, 9,11] // Result 

的結果是正確的。

我覺得你與reduce混淆map

var arr = []; 
[1,2,2,5,6].reduce(function(a,b){ 
    arr.push(a+b); 
    return b; 
}, 0); 
arr; // [1, 3, 4, 7, 11] 
[0, 1, 2, 2, 5] // Values returned in previous iteration 
+ [1, 2, 2, 5, 6] // Your values 
----------------- 
    [1, 3, 4, 7,11] // Result 
+0

你是對的。我正在閱讀reduce的文檔,儘管我可以使用map順序地添加元素:)。謝謝! – codeBarer

5

這是因爲地圖通過您的值作爲第一個參數和指標作爲第二。所以,你要添加的是:1 + 0,2 + 1,2 + 2,5 + 3等

你的a值是數組中的值:1,2,2,5, 6

b值實際上是一個索引,而不是一個值從數組中:0,1,2,3,4

+0

doh!謝謝:)解釋。 – codeBarer

1

所以第一參數 'a' 爲value和 'b' 爲index 。所以加在一起只顯示了核心價值。所以'a'包含[1, 2, 2, 5, 6]和'b'包含[0, 1, 2, 3, 4]