1. ホーム
  2. javascript

.flat()は関数ではありません、何が悪いのでしょうか?

2023-09-05 22:59:08

質問

次のコード

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

steamrollArray([1, [2], [3, [[4]]]]);

リターン

arr.flat は関数ではありません

で試してみました。 ファイアフォックス クローム v67 を実行しても、同じ結果になりました。

何が問題なのでしょうか?

どのように解決するのですか?

この flat メソッドは はまだ実装されていません。 は、一般的なブラウザ(Chrome v69、Firefox Nightly、Opera 56のみ)では実装されていません。これは実験的な機能です。したがって、あなたはそれを使用することはできません まだ .

あなたは、自分自身の flat 関数の代わりに

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)
);

このコードは ここで によって ノア・フレイタス は元々、配列を平坦化するために実装されたもので depth を指定せずに配列を平坦化するために実装されたものです。