1. ホーム
  2. javascript

[解決済み] JavaScriptで配列を空にするにはどうしたらいいですか?

2022-03-16 19:59:07

質問

配列を空にする方法はありますか? .remove() ?

例えば

A = [1,2,3,4];

どうすれば空にできますか?

解決方法は?

既存の配列をクリアする方法 A :

方法1

(これは質問に対する私の当初の答えでした)

A = [];

このコードでは、変数 A を新しい空の配列に変換します。これは、もし への参照は、元の配列 A これは、実際にはまったく新しい (空の) 配列を作成することになるからです。他の変数やプロパティからこの配列を参照した場合、元の配列は変更されないので、このメソッドには注意が必要です。このメソッドを使用するのは、配列を元の変数から参照する場合だけにしてください。 A .

これも最速の解決策です。

このコードサンプルは、この方法を使用した場合に発生する可能性のある問題を示しています。

var arr1 = ['a','b','c','d','e','f'];
var arr2 = arr1;  // Reference arr1 by another variable 
arr1 = [];
console.log(arr2); // Output ['a','b','c','d','e','f']

方法2 (として 提案された によって マシュー・クラムリー )

A.length = 0

これは、既存の配列の長さを0にしてクリアします。この方法は、JavaScriptのすべての実装で動作しないのではないかという意見もありましたが、そうではないことがわかりました。また、ECMAScript 5 の "strict mode" を使用する場合にも、配列の length プロパティは読み取り/書き込みのプロパティであるため、この処理は動作します。

方法3 (として 提案された によって アンソニー )

A.splice(0,A.length)

使用方法 .splice() は完全に動作しますが .splice() 関数は、削除されたすべての項目を含む配列を返すので、実際には元の配列のコピーを返します。ベンチマークによると、これは性能に全く影響を及ぼさないことが分かっています。

方法4 (として 提案された によって タンギーk )

while(A.length > 0) {
    A.pop();
}

この解決策はあまり簡潔ではなく、また、元の回答で参照した以前のベンチマークに反して、最も遅い解決策です。

パフォーマンス

をクリアする方法のうち 既存の配列 のように、2 と 3 の方法はパフォーマンス的に非常に似ており、4 の方法よりもずっと高速です。こちらをご覧ください ベンチマーク .

のご指摘の通りです。 Diadistis で、その 回答 以下のように、上記の4つの方法の性能を判断するために使用されたオリジナルのベンチマークには、欠陥がありました。元のベンチマークでは、クリアした配列を再利用していたため、2回目の反復では、すでに空の配列をクリアしていたのです。

以下のベンチマークでは、この不具合を修正しています。 http://jsben.ch/#/hyj65 . これは明らかに、#2 (length property) と#3 (splice) の方法が最速であることを示しています (元の配列を変更しない#1 の方法はカウントされていません)。


これはホットな話題で、多くの論争の原因になっています。実際には多くの正解があり、この回答は非常に長い間、認められた回答としてマークされているため、ここではすべての方法を掲載します。