Javascript 关于Array.reduce()的奇怪函数
我有以下和平的准则:Javascript 关于Array.reduce()的奇怪函数,javascript,arrays,reduce,Javascript,Arrays,Reduce,我有以下和平的准则: const reducedValue = array.reduce((acc, curr) => { if (decision(curr)){ return acc++; } return acc; }, 0); 当console.log(samApples)始终为0时,即使决策多次为真。但是,当我更改为acc+=1时,效果很好 为什么会发生这种情况?如果在变量(Y++-postfix)之后使用++运算符,则返回值,然后递增。
const reducedValue = array.reduce((acc, curr) => {
if (decision(curr)){
return acc++;
}
return acc;
}, 0);
当console.log(samApples)
始终为0
时,即使决策
多次为真
。但是,当我更改为acc+=1
时,效果很好
为什么会发生这种情况?如果在变量(
Y++
-postfix)之后使用++
运算符,则返回值,然后递增。如果在值(++Y
-前缀)之前使用,它将递增,然后返回:
设x=1,y=1;
console.log(x++);//返回x,然后递增
console.log(++y);//递增y然后返回它
如果在变量(y++
-postfix)返回值之后使用++
运算符,则将其递增。如果在值(++Y
-前缀)之前使用,它将递增,然后返回:
设x=1,y=1;
console.log(x++);//返回x,然后递增
console.log(++y);//递增y,然后返回它
,这是因为++
运算符的工作方式。当您执行x++
x
操作时,在当前操作之后,它将递增,在您的情况下,它是return
,并且由于原语类型作为值传递,而不是作为函数参数的引用,因此增量将在return
之后处理,而不会转入下一次迭代
相反,+=
是在任何其他操作之前立即执行的。因此,这是可行的。但是,如果您更喜欢使用++
语法,请如下使用:++x
,因为此操作是在返回之前执行的(其工作方式与+=1
)
还可以查看关于MDN的以下(可以说更好)描述:
还有一点概念证明:
const val=[1,2,3,4,5,6]。reduce((acc,curr)=>{
返回+acc;
}, 0);
log(val)
这是因为++
操作符的工作方式。当您执行x++
x
操作时,在当前操作之后,它将递增,在您的情况下,它是return
,并且由于原语类型作为值传递,而不是作为函数参数的引用,因此增量将在return
之后处理,而不会转入下一次迭代
相反,+=
是在任何其他操作之前立即执行的。因此,这是可行的。但是,如果您更喜欢使用++
语法,请如下使用:++x
,因为此操作是在返回之前执行的(其工作方式与+=1
)
还可以查看关于MDN的以下(可以说更好)描述:
还有一点概念证明:
const val=[1,2,3,4,5,6]。reduce((acc,curr)=>{
返回+acc;
}, 0);
console.log(val)
acc+decision(curr)
足够了。我习惯于打字脚本(显式转换)。acc+decision(curr)
sulfies.yesp。我习惯于打字脚本(显式转换)。