ホームページ > ウェブフロントエンド > jsチュートリアル > jsで2つの変数間の値を交換する11のメソッドのまとめとパフォーマンス分析(コード付き)

jsで2つの変数間の値を交換する11のメソッドのまとめとパフォーマンス分析(コード付き)

不言
リリース: 2018-07-26 17:39:17
オリジナル
5033 人が閲覧しました

JS は 2 つの変数の値を交換します。これは深く理解する価値のあるトピックです。この記事では、JS 変数間の交換の問題を解決するための方法が多数あります。 JS の変数交換の方法と JS 変数交換のパフォーマンス分析。

私が最近プロジェクトに取り組んでいたとき、要件の 1 つは配列内の 2 つの要素を交換することでした。その時の方法は、

arr = [item0,item1,...,itemN];
//最初使用这段代码来交换第0个和第K(k<N)个元素
arr[0] = arr.splice(k, 1, arr[0])[0];
ログイン後にコピー

その時、私はこの方法がとても良いと思いました。

その後、空き時間にこれを研究し、通常の方法と比較するための分析ツールを自分で書きました。

結果は私の予想をはるかに超えていました。この方法の効率は私が思っていたよりもはるかに低かったです。以下はテスト結果の 1 つの写真です

jsで2つの変数間の値を交換する11のメソッドのまとめとパフォーマンス分析(コード付き)


そこで、これに基づいて、数値交換の他のいくつかの方法を研究し、それらを分析ツールに統合した結果、この記事の要約が生まれました。

JS 変数交換のいくつかのメソッド

実際、JS 変数交換に関して、最も広く使用されているメソッドは、基本的にフロントエンド担当者に必要なスキルです。この記事では、この分析と研究の機会を利用して、これらのメソッドをリストします。この分析で使用されるいくつかの交換メソッド:

最初: 通常の一時変数交換メソッド

適用性: 以下のすべてのタイプのコードに適用可能:

tmp = a;
a = b;
b = tmp;
ログイン後にコピー

簡単な説明: これは最も広く使用されている方法であり、実際のテストと分析の結果、パフォーマンスも非常に高くなります

(JS では、この方法は確かに非常に効率的であり、tmp 変数が事前に作成されている限り、他の言語でも、パフォーマンスはそれほど低くはありませんが、一部のアクロバットや少数派のパフォーマンスは非常に低いです)

基本的に言えることは、クラシックが最もエレガントであるということです

2 番目: データ交換に新しいオブジェクトを使用します

適用性: 適用可能すべてのタイプのコードは次のようになります:

a = {a : b, b : a};
b = a.b
;a = a.a;
ログイン後にコピー

簡単な説明: この方法は実際の戦闘ではほとんど使用されません

3 番目の方法: データ交換に新しい配列を使用します

適用性: 以下のすべてのタイプのコードに適用できます:

a = [b, b=a][0];
ログイン後にコピー

簡単な説明: この方法は主要なフォーラムで使用されているのが確認されていますが、テスト後の実際のパフォーマンスは高くありません

4番目の方法: 配列を使用して変数を交換する(EJSサポートが必要)

適用性: すべてのタイプのコードに適用可能次のように:

`[a, b] = [b, a];
ログイン後にコピー

簡単な説明: これは、ES6 が登場した後に何人かが使用しているのを見たものですが、実際に既存のブラウザでテストしましたが、パフォーマンスは非常に低かったです

5 番目の方法: try catch Exchange を使用します

適用性: 以下のすべてのタイプのコードに適用できます。 :

a=(function(){;
    try{return b}
    finally{b=a}}
)();
ログイン後にコピー

簡単な説明: この方法は誰も使用することはほとんどなく、実用性はなく、パフォーマンスはさまざまな方法の中で最下位です

6番目の方法: XOR演算交換変数1番目の方法

適用範囲: 数値または文字列コードに適用されます以下の通り:

a = (b = (a ^= b) ^ b) ^ a;
ログイン後にコピー

簡単な説明: XOR メソッドは、数値または文字列に対してより一般的に使用され、そのパフォーマンスは低くありません

7 番目: 変数を交換するための XOR 演算の 2 番目のメソッド

適用性: 数値または文字列コードに適用できるのは次のとおりです:

a ^=b;
b ^=a;
a ^=b;
ログイン後にコピー

簡単な説明: XOR メソッドは、数値または文字列に対してより一般的に使用され、そのパフォーマンスは低くありません

8 番目のメソッド: 数値間の加算と減算、最初の加算と減算のメソッド

適用範囲: のみ適用可能な数値コードは次のとおりです。

a = a + b;
b = a - b; 
a = a - b;
ログイン後にコピー

簡単な説明: この使用法が数値間の交換にのみ使用される場合、パフォーマンスは弱くありません

9番目の方法:数値間の加算と減算、最初の加算と減算の方法

適用範囲:数値にのみ適用可能コードは次のとおりです:

a = b -a +(b = a);
ログイン後にコピー

簡単な説明: この使用法が数値間の交換にのみ使用される場合、パフォーマンスは弱くありません

タイプ 10: eval 計算を使用します

適用範囲: 以下の数値と文字列コードにのみ適用されます:

eval("a="+b+";b="+a);
ログイン後にコピー

簡単な説明: この方法は研究用であり、実際の戦闘では注意して使用する必要があります

このモードを 10,000 回実行するのにかかる時間は、他のモードでは 1 億回に相当します...

タイプ 11: 配列で、次を使用します。 2 つの要素の位置を交換するためのスプライス

適用範囲: 配列要素にのみ適用可能 コードは次のとおりです:

arr[0] = arr.splice(2, 1, arr[0])[0];
ログイン後にコピー

簡単な説明: このメソッドは非常にエレガントに見えますが、実際にはパフォーマンスは一時変数よりもはるかに劣ります

さまざまな交換メソッドのパフォーマンス比較

上記のいくつかのメソッドを 1 つずつ比較分析した結果、基本的に導き出される結論は次のとおりです。

一時変数交換は正直に使用しましょう。古典的でエレガントで、問題が発生しないことが保証されています

パフォーマンス比較のスクリーンショット

分析結果 1

以下のスクリーンショットのデータは、後で導き出された結論ですChrome で 1 億回実行します (毎回 100 万回実行し、合計 100 回ループし、分析結果が得られます)。tmp 変数交換が最も速く、try catch が最も遅いことがわかります

jsで2つの変数間の値を交換する11のメソッドのまとめとパフォーマンス分析(コード付き)

分析結果2

以下のスクリーンショットデータは、Chrome (es6対応)で100万回実行した後に得られた結論です(各実行は10,000回、合計100サイクルで、得られた分析結果ですjsで2つの変数間の値を交換する11のメソッドのまとめとパフォーマンス分析(コード付き)

jsで2つの変数間の値を交換する11のメソッドのまとめとパフォーマンス分析(コード付き)

が確認できます、eval)は最も遅く、スプライスのパフォーマンスは低く、tmp 変数の交換は非常に安定しています

関連推奨事項:

JS は、実装コードを交換する価値のある 2 つの変数を実装するために中間変数 temp を使用しません

以上がjsで2つの変数間の値を交換する11のメソッドのまとめとパフォーマンス分析(コード付き)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート