JavaScript的数组映射原型是否有点偏差
Is JavaScript's array map prototype a little off?
我正在玩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
结果是正确的。
我认为您将map
与reduce
混淆了:
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]
相关文章:
- 检查是否已加载原型
- JavaScript中的原型继承是否演示了类型多态性
- 是否可以在Java中模拟Javascript风格的原型
- 在定义了构造函数之后,是否可以将实例属性添加到JavaScript原型中
- 是否可以将方法添加到空值的原型中
- 对象构造:原型是否真的有必要
- 是否可以从 javascript 中的原型方法访问私有类属性
- 是否存在替换Javascript构造函数的问题'原型,而不是添加到原型中
- JS原型是否可以访问初始化期间传递给对象的参数
- 使用原型时是否可以直接将类方法作为回调传递
- 如果修改原型,是否有任何不良副作用
- objective-c的参数[self]是否与JavaScript的原型相关
- 在javascript中使用原型设计是否会对ajax调用和异步代码产生负面影响
- 是否需要在经典继承中更改子类的“原型.构造函数”
- 对于 JavaScript 的继承,引用或复制父级的原型是否更好
- 检查自定义元素原型是否源自特定原型
- 属性是否应该出现在原型上
- Angular$watch在对象上是否包括其原型成员
- 修改子项的原型是否会影响父项的原型
- 是否有一个等于hasOwnProperty()的方法可以遍历原型链