JavaScript的数组映射原型是否有点偏差

Is JavaScript's array map prototype a little off?

本文关键字:是否 原型 数组 映射 JavaScript      更新时间:2023-09-26

我正在玩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 ]*/

这只是一个奇怪的问题,更像是为什么第一段代码看起来。

这是因为 map 将值作为第一个参数传递,将索引作为第二个参数传递给您。因此,您要添加的是:1 + 0,2 + 1,2 + 2,5 + 3等。

您的a值是数组中的值:1, 2, 2, 5, 6

您的b值实际上是一个索引,而不是数组中的值:0, 1, 2, 3, 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

结果是正确的。

我认为您将mapreduce混淆了:

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

所以第一个参数'a'是value,'b'是index。 因此,加在一起仅显示 corect 值。 所以"a"包含[1, 2, 2, 5, 6],"b"包含[0, 1, 2, 3, 4]