An ES2019 spec-compliant Array.prototype.flat shim/polyfill/replacement that works as far down as ES3.
This package implements the es-shim API interface. It works in an ES3-supported environment and complies with the proposed spec.
Because Array.prototype.flat depends on a receiver (the this value), the main export takes the array to operate on as the first argument.
npm install --save array.prototype.flatvarflat=require('array.prototype.flat');varassert=require('assert');vararr=[1,[2],[],3,[[4]]];assert.deepEqual(flat(arr,1),[1,2,3,[4]]);varflat=require('array.prototype.flat');varassert=require('assert');/* when Array#flat is not present */deleteArray.prototype.flat;varshimmedFlat=flat.shim();assert.equal(shimmedFlat,flat.getPolyfill());assert.deepEqual(arr.flat(),flat(arr));varflat=require('array.prototype.flat');varassert=require('assert');/* when Array#flat is present */varshimmedIncludes=flat.shim();varmapper=function(x){return[x,1];};assert.equal(shimmedIncludes,Array.prototype.flat);assert.deepEqual(arr.flat(mapper),flat(arr,mapper));Simply clone the repo, npm install, and run npm test
