javascript - 在函数体中返回运算符机制
问题描述
有人可以解释为什么该函数在以下两种情况下的行为不同吗?在第一种情况下,会提示错误说“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);
解决方案
在第一个场景中,您返回 的结果,这是调用该方法的对象(累加器)Array.push()
的新length
属性。array
在 的下一次迭代中Array.reduce()
,这number
是作为累加器提供的,您再次尝试向其推送一个值。由于它不再是array
a 而是 a number
,因此您会收到 error arr.push is not a function
。
Array.reduce()
回调应该总是返回累加器,就像在场景 2 中所做的一样。
推荐阅读
- machine-learning - LSTM 中的 NumHiddenUnits
- sql - 随机抽样并为 Tableau 中的每个样本集分配值
- node.js - nock 是否与节点多线程集群模块一起使用?
- laravel - npm run watch 停止工作 - 带有 Vue.js 的 Laravel
- java - 布尔“修复”功能。它是干什么用的?
- r - 带有两列的模糊连接,只有一对需要模糊连接语法的列
- excel - 当两个文件从一个用户移动到另一个用户时,是否有一个 VBA 代码来保护它们之间的引用?
- progressive-web-apps - 如何侦听特定预缓存资源的更新?
- java - 扩展单例是错误的吗?
- java - 正确关闭输入流链