首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为什么不能在.reduce()函数中返回推送到累加器的结果?

为什么不能在.reduce()函数中返回推送到累加器的结果?
EN

Stack Overflow用户
提问于 2017-01-27 09:23:25
回答 3查看 6.1K关注 0票数 4

简单的例子,希望返回数组的数组。对于‘peep’中的每个名称,我希望将一个数组中的单词“hello”推入累加器。

代码语言:javascript
运行
复制
const peeps = ['sally', 'nick', 'dave'];

return peeps.reduce((acc, val) => {
     return acc.push(['hello'])
  }, []);

它一直说acc.push()不是函数。

有人能帮我理解一下为什么这不管用吗?

EN

Stack Overflow用户

回答已采纳

发布于 2017-01-27 09:25:56

您使用Array#push

push()方法将一个或多个元素添加到数组的末尾,并返回数组的新长度。

这将返回推送后数组的长度。则累加器值是数字,而不是数组。

代码语言:javascript
运行
复制
return acc.push(['hello']) // 1

解决方案1:返回数组而不是推送结果。

代码语言:javascript
运行
复制
const peeps = ['sally', 'nick', 'dave'];

console.log(peeps.reduce((acc, val) => {
    acc.push(['hello']);
    return acc;
}, []));

解决方案2:使用Array#concat

concat()方法用于合并两个或多个数组。此方法不更改现有数组,而是返回一个新数组。

不过,我会避免与大量数据一起使用它,因为它比push效率低得多。jsPerf

代码语言:javascript
运行
复制
const peeps = ['sally', 'nick', 'dave'];

console.log(peeps.reduce((acc, val) => acc.concat([['hello']]), []));

解决方案3:使用Array#map。如果结果数组应该具有与给定数组相同的长度,这是最好的。

map()方法创建一个新数组,其结果是对该数组中的每个元素调用提供的函数。

代码语言:javascript
运行
复制
const peeps = ['sally', 'nick', 'dave'];

console.log(peeps.map(val => ['hello']));

票数 16
EN
查看全部 3 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41890545

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档