[解決済み] JavaScriptで配列を空にするにはどうしたらいいですか?
質問
配列を空にする方法はありますか?
.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 プロパティは読み取り/書き込みのプロパティであるため、この処理は動作します。
A.splice(0,A.length)
使用方法
.splice()
は完全に動作しますが
.splice()
関数は、削除されたすべての項目を含む配列を返すので、実際には元の配列のコピーを返します。ベンチマークによると、これは性能に全く影響を及ぼさないことが分かっています。
while(A.length > 0) {
A.pop();
}
この解決策はあまり簡潔ではなく、また、元の回答で参照した以前のベンチマークに反して、最も遅い解決策です。
パフォーマンス
をクリアする方法のうち 既存の配列 のように、2 と 3 の方法はパフォーマンス的に非常に似ており、4 の方法よりもずっと高速です。こちらをご覧ください ベンチマーク .
のご指摘の通りです。 Diadistis で、その 回答 以下のように、上記の4つの方法の性能を判断するために使用されたオリジナルのベンチマークには、欠陥がありました。元のベンチマークでは、クリアした配列を再利用していたため、2回目の反復では、すでに空の配列をクリアしていたのです。
以下のベンチマークでは、この不具合を修正しています。 http://jsben.ch/#/hyj65 . これは明らかに、#2 (length property) と#3 (splice) の方法が最速であることを示しています (元の配列を変更しない#1 の方法はカウントされていません)。
これはホットな話題で、多くの論争の原因になっています。実際には多くの正解があり、この回答は非常に長い間、認められた回答としてマークされているため、ここではすべての方法を掲載します。
関連
-
vueが定義するプライベートフィルタと基本的な使い方
-
[解決済み】JavaScriptの配列でforEachが関数でない不具合
-
[解決済み】「.addEventListener is not a function」なぜこのエラーが発生するのか?
-
[解決済み] 配列から特定の項目を削除するにはどうすればよいですか?
-
[解決済み] JavaScriptで "use strict "は何をするのか、その根拠は?
-
[解決済み] JavaScriptで文字列が部分文字列を含むかどうかを確認する方法は?
-
[解決済み] JavaScript で配列に値が含まれているかどうかを確認するにはどうすればよいですか?
-
[解決済み] オブジェクトが配列であるかどうかを確認するにはどうすればよいですか?[重複]。
-
[解決済み] Javascriptで配列から空の要素を削除する
-
[解決済み】オブジェクトの配列を文字列のプロパティ値でソートする
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
Vueがechartsのtooltipにクリックイベントを追加するケーススタディ
-
JavaScriptにおけるマクロタスクとミクロタスクの詳細
-
jsを使った簡単な照明スイッチのコード
-
vue+webrtc(Tencent cloud)ライブ機能の実践を実現するために
-
[解決済み】Uncaught SyntaxError: JSONの位置0に予期しないトークンuがあります。
-
[解決済み】TypeScript-のAngular Frameworkエラー - "exportAsがngFormに設定されたディレクティブはありません"
-
[解決済み】ExpressJS : res.redirect()が期待通りに動かない?
-
[解決済み】React Uncaught Error: 対象コンテナが DOM 要素でない [重複]。
-
[解決済み】リクエストに失敗していないのに、「TypeError: failed to fetch」が表示される。
-
[解決済み】<select>で現在選択されている<option>をJavaScriptで取得するにはどうすればよいですか?