The following code
function steamrollArray(arr) { // I'm a steamroller, baby return arr.flat(); } steamrollArray([1, [2], [3, [[4]]]]);
returns
arr.flat
is not a function
I tried it in Firefox and Chrome v67 and the same result has happened.
What's wrong?
Flat() This array method takes a single optional “depth” argument (which defaults to 1 should it be undefined ). It creates a new array with all sub-array elements concatenated into it recursively up to the value of 'depth'.
The flat
method is not yet implemented in common browsers (only Chrome v69, Firefox Nightly and Opera 56). It’s an experimental feature. Therefore you cannot use it yet.
You may want to have your own flat
function instead:
Object.defineProperty(Array.prototype, 'flat', { value: function(depth = 1) { return this.reduce(function (flat, toFlatten) { return flat.concat((Array.isArray(toFlatten) && (depth>1)) ? toFlatten.flat(depth-1) : toFlatten); }, []); } }); console.log( [1, [2], [3, [[4]]]].flat(2) );
The code was taken from here by Noah Freitas originally implemented to flatten the array with no depth
specified.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With