1.反復方法

  ポイントに注意を払う、新しい配列を作成し、配列トラバーサルが渡され、新しい値が新しい配列を配列に追加されていません:メソッドの配列内の値かどうかを判断するために、「indexOfの」方法はECMAScRipt5、IE8以下である最も簡単な重量の方法、アイデアの実現サポートされていない、次のように、ブラウザのコード、ソースコードの低いバージョンとの互換性が記述する必要があります:

  重量に//配列の最も簡単な方法

  関数unique1(アレイ){

  VARのn = []; //新しい一時的な配列

  //現在の配列をトラバース

  (VARのために私は= 0; I < aRRay.長さ; I++){

  //私の現在の配列がスキップ、一時的な配列に保存した場合は、

  一時配列の内部に//そうでない場合は、現在の用語プッシュ

  (Nの場合.indexOf(配列[I])== - 1)nは.プッシュ(配列[I]).

  }

  n個返します.

  }

  2.法律のオブジェクトキー

  新しいオブジェクトの単語、結合JSオブジェクトの値かどうかを決定するために受信アレイない横断しながら、新しいJSオブジェクトならびに新規配列:実行速度の方法が速く、メモリフットプリントは、他の方法の任意の数の、アイデアの実現よりも大きいですキーを高め、新しい配列を置きます.注意事項:JSは、対象キーは、自動的に着信キー「のtoString()」を実行するかどうか、異なるキーはとして誤解されることができる決定され、例えば、[1]、[「1」] .問題を解決するには、まだ「のindexOf」を呼び出す必要があります.

  //最速、最大のスペースを占めて(時間のためのスペース)

  関数unique2の(配列){

  VAR N = {}、R = []においてlen =配列.長さ、ヴァル、タイプ;

  (VARのために私は= 0; I < アレイ.長さ; I++) {

  ヴァル=配列[i]は、

  タイプ= typeof演算ヴァル.

  (もし!N [ヴァル]){

  N [ヴァル] = [タイプ].

  r.プッシュ(ヴァル).

  }そうであれば(N [ヴァル].indexOf(タイプ) < 0) {

  N [ヴァル].プッシュ(タイプ).

  r.プッシュ(ヴァル).

  }

  }

  Rを返します.

  }

  3.分析方法の配列の添字

  それでも、ほぼ1で「indexOfの」メソッドパフォーマンス、アイデアの実現を呼び出す必要があります:私はではない現在の配列位置で初めてのアイテム私の現在の配列が、その後、私は項目が繰り返される表す場合、無視.そうでなければ、結果は配列に格納されています.

  関数unique3(アレイ){

  VAR N = [配列[0]; //配列結果

  //第二項から横断を開始

  (VARのために、私は1 =; I < array.length; i++) {

  //もし代わりに、私の現在のアレイで初めてアレイの現在の項目I、

  //その後、i番目の項目を繰り返し、無視さを表します.そうでなければ、結果は配列に格納されています

  (配列の場合.([I]配列)のindexOf == I)N.プッシュ(配列[I]).

  }

  n個返します.

  }

  4.隣接法律の除去を発注した後、

  「ソート」方式ネイティブ非常にトリッキーの配列の結果をソートするが、効果なしの再順番に欠点に注意を払っていないが、.アイデアの実現:同じ値に隣接して並べ替えられ、その後、唯一横断しながら、前の値の非繰り返しの新しい配列を結合する、並べ替えの配列を渡します.

  //隣接し、トラバース値の重複排除の同じ値

  関数unique4(アレイ){

  array.ソート();

  VAR再= [配列[0]].

  (VARのために、私は1 =; I < array.length; i++){

  IF(配列[I] !==再[再.長-1]){

  再.プッシュ(配列[I]).

  }

  }

  再を返します.

  }

  5.アレイ法を介して最適化されました

  メソッドの実装コード、アイデアの実現は非常にクールです:新しい配列に右端の値の繰り返しを得ることはありません.(検出終了が現在のサイクルは、上部ループ決意に同時にときに値が繰り返される)推奨

  //アイデア:新しい配列に右端の値の繰り返しを得ることはありません

  関数unique5(アレイ){

  VaRのR = [];

  (VARのためにiが0、L =配列=.length; i < l; i++) {

  J;(VARのJ = I + 1のために < l; j++)

  IF(配列[I] ===アレイ[J])J = ++ I.

  r.プッシュ(配列[I]).

  }

  Rを返します.

  }

  ブラウザはindexOfを、IE8以下のような新しい方法ecmaScript5のindexOfサポートしているかどうかを判別し(IE8を含むが、IE8は一部のみのecma5をサポート)サポートされていません.

  (もし!アレイ.プロトタイプ.の指標) {

  // indexOfメソッドを追加

  アレイ.プロトタイプ.indexOf =関数(アイテム){

  VaRの結果= -1、a_item = NULL;

  (この場合.長さ== 0){

  結果を返します.

  }

  (VARのために私は0、lenは=これを=.length; i < len; i++){

  a_item =この[I].

  IF(a_item ===アイテム){

  結果= I;

  ブレーク;

  }

  }

  結果を返します.

  }

  }

  これらは、重いを提供するために、誰もがJSの配列のためのアルゴリズムの5種類があり、我々は助け学習したいです.

  あなたもの記事に興味がある可能性があり:JSは、2つの配列の交点を取る一般的に使用される方法の配列が重いメソッド(6つのメソッド)に重み要約JSの配列を達成するためのJS |差分セット| |の歴史に大きなサンプルコード組合|補数推奨重量JSを達成するために、アレイにJavaScript配列、及び配列の含有量の重量で10重量法(推奨)への完全な二つの方法JavaScript配列が決定されるかどうか重量性能JS配列に二つの方法JS配列オブジェクトで同じオブジェクトデエンファシス(方法12種類の、最も完全な履歴)JS重複排除のいくつかの理解のJavaScript配列の概要の一例に重複排除アルゴリズムを実現する複数のアレイを組み合わせます

体重を達成するためのアルゴリズムの5種類のJS配列

Recommend Article: