You use Array#push
The push()
method adds one or more elements to the end of an array and returns the new length of the array.
this returns the length of the array after pushing. Then the accumulator value is a number, not an array
return acc.push(['hello']) // 1
Solution 1: Return the array instead of the result of pushing.
const peeps = ['sally', 'nick', 'dave'];
console.log(peeps.reduce((acc, val) => {
acc.push(['hello']);
return acc;
}, []));
Solution 2: Use Array#concat
.
The concat()
method is used to merge two or more arrays. This method does not change the existing arrays, but instead returns a new array.
I would avoid using it with large amounts of data though, as it is a lot less efficient than push. jsPerf
const peeps = ['sally', 'nick', 'dave'];
console.log(peeps.reduce((acc, val) => acc.concat([['hello']]), []));
Solution 3: Use Array#map
. This works best, if the result array should have the same length as the given array.
The map()
method creates a new array with the results of calling a provided function on every element in this array.
const peeps = ['sally', 'nick', 'dave'];
console.log(peeps.map(val => ['hello']));
return acc.concat(['hello']);
. – Canaliculus