.flat() is not a function, what's wrong?

前端 未结 5 1592
情话喂你
情话喂你 2020-12-16 08:40

The following code

function steamrollArray(arr) {
  // I\'m a steamroller, baby
  return arr.flat();
}

steamrollArray([1, [2], [3, [[4]]]]);
5条回答
  •  再見小時候
    2020-12-16 09:28

    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.

提交回复
热议问题