如何解决关于 Array.reduce() 的奇怪函数
const reducedValue = array.reduce((acc,curr) => {
if (decision(curr)){
return acc++;
}
return acc;
},0);
当 console.log(samApples)
始终为 0
时,即使 decision
多次为 true
。但是,当我更改为 acc += 1
时就好了。
为什么会发生这种情况?
解决方法
如果在变量 (++
- 后缀) 之后使用 Y++
运算符返回值,然后将其递增。如果在值(++Y
- 前缀)之前使用,则递增,然后返回:
let x = 1,y = 1;
console.log(x++); // returns x then increments
console.log(++y); // increments y and then returns it
但是,您不需要增加累加器,而是返回新值:
const reducedValue = array.reduce((acc,curr) =>
acc + (decision(curr) ? 1 : 0),0);
并且由于您可以使用一元 +
运算符将布尔值转换为数字,因此您可以将其缩短为:
const reducedValue = array.reduce((acc,curr) =>
acc + decision(curr) // acc + +decision(curr) in typescript,0);
,
这是因为 ++
运算符的工作方式。当您执行 x++
x
在当前操作之后递增时,在您的情况下为 return
并且由于原始类型作为值而不是作为函数参数的引用传递,因此增量为在 return
之后处理,不会延续到下一次迭代。
相反,+=
会立即执行,因此在任何其他操作之前。因此,为什么这有效。但是,如果您更喜欢使用 ++
语法,请像这样使用它:++x
,因为此操作在 return
之前执行(并且与 += 1
完全一样)。
还可以查看 MDN 上的这个(可以说是更好的)描述: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Increment#description
还有一点概念证明:
const val = [1,2,3,4,5,6].reduce((acc,curr) => {
return ++acc;
},0);
console.log(val)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。