「Array.prototype.fill() は、新しいインスタンスを作成するのではなく、オブジェクトを使用して参照を渡します。」
P粉682987577
P粉682987577 2023-08-23 09:15:17
0
2
450
<p>私は少し遊んで、長さ <code>x</code> の新しい配列をインスタンス化しようとしました。ここで、配列のすべての要素は値 <code>y</code> に初期化されます。 < /p> <pre class="brush:php;toolbar:false;">var arr = new Array(x).fill(y);</pre> <p>このメソッドは、<code>y</code> の値が <strong>オブジェクト</strong> ではない場合にうまく機能します。 つまり、<code>y</code> がオブジェクトの場合、次の条件が真になります。 <pre class="brush:php;toolbar:false;">var arr = new Array(2).fill({}); arr[0] === arr[1]; //結果は true です。 arr[0].test = '文字列'; arr[1].test === 'string'; //結果も true;</pre> <p>fill 関数を使用するときに、要素ごとに新しいオブジェクトを作成する必要があることを宣言する方法はありますか?それともループに変換する必要がありますか? </p>
P粉682987577
P粉682987577

全員に返信(2)
P粉878510551

受け入れられた回答は素晴らしく、90% の確率で機能します。

ただし、高パフォーマンスの JS アプリケーションを作成していて、大規模な配列を使用している場合、Array.map(..) はメモリとプロセッサの使用量の点で多くの負荷を生じます。配列のコピーが作成されるためです。

従来の for ループを使用することをお勧めします:

リーリー

6 つの代替案をテストしたところ、次の結果が得られました:

  • Array.map()、上記と同様 (元のものより 11 倍遅い!

    ):
  • リーリー
  • for ループ

    、最良の選択 (最速):
  • リーリー
  • forEach (6 倍低速):

    リーリー

[2020-08-27更新]イリアス・カリム氏が別の方法を提案しました

  • Array.from (30 倍遅い! ) - 最高の構文にもかかわらず、パフォーマンスの点では明らかに劣ります:(

    リーリー
  • [..Array(..)] (5 倍遅い!)

    リーリー
  • Array.push(..)、パフォーマンスの点で 2 位にランクされています (2 倍遅い! )

    リーリー

PS: このフィドル でテストしました。

いいねを押す +0
P粉461599845

まず配列に任意の値 (例: 未定義) を入力してから、map:

を使用できます。 リーリー リーリー
いいねを押す +0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート