配列を空にする方法はありますか? もしあるなら、 で可能ですか.remove()
?
例えば、
A = [1,2,3,4];
どうすればそれを空にできますか?
ベストアンサー1
既存の配列をクリアする方法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 に設定します。配列の長さプロパティは読み取り/書き込みプロパティであるため、ECMAScript 5 で「厳密モード」を使用する場合にも機能します。
A.splice(0,A.length)
を使用すると.splice()
完全に機能しますが、.splice()
関数は削除されたすべての項目を含む配列を返すため、実際には元の配列のコピーを返します。ベンチマークでは、これがパフォーマンスにまったく影響しないことが示されています。
while(A.length > 0) {
A.pop();
}
このソリューションはあまり簡潔ではなく、元の回答で参照された以前のベンチマークとは対照的に、最も遅いソリューションでもあります。
パフォーマンス
既存の配列をクリアするすべての方法の中で、方法2と3はパフォーマンスが非常に似ており、方法4よりもはるかに高速です。こちらをご覧ください。基準。
指摘したようにディアディスティス彼らの答え以下に示すように、上記の 4 つの方法のパフォーマンスを判断するために使用された元のベンチマークには欠陥がありました。元のベンチマークではクリアされた配列が再利用されたため、2 回目の反復ではすでに空だった配列がクリアされていました。
次のベンチマークではこの欠陥が修正されています。http://jsben.ch/#/hyj65明らかに、メソッド #2 (長さプロパティ) と #3 (スプライス) が最も高速であることがわかります (元の配列を変更しないメソッド #1 は除きます)。
これは話題になっており、多くの論争を引き起こしています。実際には正しい答えはたくさんあり、この回答は長い間受け入れられた回答としてマークされているため、ここにすべての方法を記載します。