Quick review
Try to avoid very long names "generateFibonnaciSequence" can be "fibonnaciSequence".
The new array arr
is undeclared and thus will be in the global scope. Chrome has recently improved how it handles optional parameters so there is no penalty to declare the array as an argument scoped to the function.
It seems to me that the reducer can return the last Fibonnaci number rather than a array which will make the code a little cleaner.
You can also reduce the iteration by one because you are starting the sequence at 1 rather than 0.
Filling the array is a lot of extra work as you only need the first value set.
Putting all that together you can so it all with just the one array (ignoring the returned array)
const fibSeq = (n, arr = new Array(n - 1)) => [
arr, arr.reduce((fib, _, i) => arr[i + 1] = i ? fib + arr[i - 1]: 1, arr[0] = 1)
];
The reduction in overheads makes it run about 4 times quicker.
However there is a dangerous behavioral change. If n is 0 it will throw when trying to create an array with a negative value, and n = 1 will return [[1,1], 1] rather than [[1], 1].
If you need it to return for these values you can check for 0 and 1 returning the static values when needed.
const fidSeq = (n, a = --n > 0 && new Array(n)) =>
a? [a, a.reduce((f, _, i) => a[i+1] = i? f + a[i-1]: 1, a[0] = 1)]: n? [[],]: [[1], 1];
push
method mutates the data. A cool improvement would be to use the...
ES6 spread syntax in order to create this array in the return statement \$\endgroup\$