[解決済み] JavaScriptで配列を複製する最速の方法 - スライス vs. 'for'ループ
2022-03-14 08:09:47
質問
JavaScriptで配列を複製する場合。次のうちどれを使うのが速いか?
Slice
メソッド
var dup_array = original_array.slice();
For
ループ
for(var i = 0, len = original_array.length; i < len; ++i)
dup_array[i] = original_array[i];
私は両方の方法を知っている唯一のaを行う。
シャローコピー
: もし
original_array
がオブジェクトへの参照を含んでいる場合、オブジェクトは複製されませんが、参照だけがコピーされます。したがって、両方の配列が同じオブジェクトへの参照を持つことになります。
しかし、これはこの質問のポイントではありません。
スピードのことだけを聞いているんです。
解決方法は?
少なくとも 6 (!) 配列をクローンする方法です。
- ループ
- スライス
- Array.from()
- コンカット
- スプレッド演算子(FASTEST)
-
地図
A.map(function(e){return e;});
を、より多くの人に知ってもらうために ベンチマークススレッド を提供し、以下の情報を提供します。
-
について ブリンク ブラウザー
slice()
が最速の方法です。concat()
は少し遅く、そしてwhile loop
は2.4倍遅い。 -
他のブラウザの場合
while loop
は最速の方法です。これらのブラウザはslice
とconcat
.
2016年7月現在も同様です。
以下は、ブラウザのコンソールにコピーペーストして何度か実行することで、その様子を確認できる簡単なスクリプトです。出力はミリ秒単位で、小さいほど良い。
間ループ
n = 1000*1000;
start = + new Date();
a = Array(n);
b = Array(n);
i = a.length;
while(i--) b[i] = a[i];
console.log(new Date() - start);
スライス
n = 1000*1000;
start = + new Date();
a = Array(n);
b = a.slice();
console.log(new Date() - start);
これらのメソッドはArrayオブジェクト自体をクローンしますが、配列の内容は参照によってコピーされ、ディープクローンされないことに注意してください。
origAr == clonedArr //returns false
origAr[0] == clonedArr[0] //returns true
関連
-
vue for 登録ページ効果 vue for sms 認証コードログイン
-
[解決済み】gulp anythingを実行するたびに、アサーションエラーが発生します。- タスク関数を指定する必要があります
-
jq は html ページとデータを動的に分割する。
-
[解決済み] JavaScriptでメールアドレスを検証するのに最適な方法は何ですか?
-
[解決済み] JavaScriptでオブジェクトをディープクローンする最も効率的な方法は何ですか?
-
[解決済み] JavaScript で配列に値が含まれているかどうかを確認するにはどうすればよいですか?
-
[解決済み] JavaScriptのオブジェクトが空であることをテストするにはどうすればよいですか?
-
[解決済み] 配列に特定のインデックスで項目を挿入する方法 (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 実装 サイバーパンク風ボタン
おすすめ
-
jQueryのコピーオブジェクトの説明
-
vue+webrtc(Tencent cloud)ライブ機能の実践を実現するために
-
[解決済み】TypeErrorの解決方法。未定義またはヌルをオブジェクトに変換できない
-
[解決済み】 `string.split is not a function` というエラーの原因は何ですか?
-
JavaScriptのStringに関する共通メソッド
-
JSクリックイベント - Uncaught TypeError: プロパティ 'onclick' に null を設定できません。
-
モジュールのビルドに失敗しました。Error: ENOENT: no such file or directory, scandir 'D:\.... \node_modules
-
[解決済み] JavaScriptで配列の要素を回転させる
-
[解決済み] 配列を値でコピーする
-
[解決済み】Javascriptで元の配列を変更せずに配列を逆順にする。