首页 > 解决方案 > 在函数体中返回运算符机制

问题描述

有人可以解释为什么该函数在以下两种情况下的行为不同吗?在第一种情况下,会提示错误说“arr.push 不是函数”。

情景 1

const arr = [1, 3, 11];

const doubled = arr.reduce((doubledArr, item) => {
   return doubledArr.push(item * 2);
}, []);

console.log(doubled);

情景 2

const arr = [1, 3, 11];

const doubled = arr.reduce((doubledArr, item) => {
   doubledArr.push(item * 2);

   return doubledArr
}, []);

console.log(doubled);

标签: javascriptreturnreduce

解决方案


在第一个场景中,您返回 的结果,这是调用该方法的对象(累加器)Array.push()的新length属性。array在 的下一次迭代中Array.reduce(),这number是作为累加器提供的,您再次尝试向其推送一个值。由于它不再是arraya 而是 a number,因此您会收到 error arr.push is not a function

Array.reduce()回调应该总是返回累加器,就像在场景 2 中所做的一样。


推荐阅读