JavaScript的数组映射原型有点closures吗?
我正在玩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]?
这是另一个片段,它显示数组中的元素是按顺序添加的,至less我相信是正确的。
console.log( [1,2,3,4,5,6].map(function(a,b){ return a+b; }) ); /*[ 1, 3, 5, 7, 9, 11 ]*/
这只是一个奇怪的问题,更多的是为什么第一个代码片段似乎。
总结一下:
[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
这是因为地图将第一个参数的值和第二个参数的值传递给你。 所以,你要添加的是:1 + 0,2 + 1,2 + 2,5 + 3等
您a
值是数组中的值:1,2,2,5,6
您的b
值实际上是一个索引,而不是数组中的值:0,1,2,3,4
所以第一个参数'a'是value
,'b'是index
。 所以加在一起只显示了核心价值。 所以'a'包含[1, 2, 2, 5, 6]
,'b'包含[0, 1, 2, 3, 4]