简单的例子,希望返回数组的数组。对于‘peep’中的每个名称,我希望将一个数组中的单词“hello”推入累加器。
const peeps = ['sally', 'nick', 'dave'];
return peeps.reduce((acc, val) => {
     return acc.push(['hello'])
  }, []);它一直说acc.push()不是函数。
有人能帮我理解一下为什么这不管用吗?
发布于 2017-01-27 09:25:56
您使用Array#push
push()方法将一个或多个元素添加到数组的末尾,并返回数组的新长度。
这将返回推送后数组的长度。则累加器值是数字,而不是数组。
return acc.push(['hello']) // 1解决方案1:返回数组而不是推送结果。
const peeps = ['sally', 'nick', 'dave'];
console.log(peeps.reduce((acc, val) => {
    acc.push(['hello']);
    return acc;
}, []));
解决方案2:使用Array#concat。
concat()方法用于合并两个或多个数组。此方法不更改现有数组,而是返回一个新数组。
不过,我会避免与大量数据一起使用它,因为它比push效率低得多。jsPerf
const peeps = ['sally', 'nick', 'dave'];
console.log(peeps.reduce((acc, val) => acc.concat([['hello']]), []));
解决方案3:使用Array#map。如果结果数组应该具有与给定数组相同的长度,这是最好的。
map()方法创建一个新数组,其结果是对该数组中的每个元素调用提供的函数。
const peeps = ['sally', 'nick', 'dave'];
console.log(peeps.map(val => ['hello']));
https://stackoverflow.com/questions/41890545
复制相似问题