体重や配列に体重を達成するためのJS文字列

https://blog.csdn.net/charles_tian/article/details/79938010

タイトル:入力文字列で繰り返される文字を削除する機能を実装します。

タイトル:入力配列が重複要素を削除し、機能を実装します。

私はこの質問には、私たちはしばしば、それを満たしていることである彼らが遭遇するたびに変更はないだろうかのようではないと思いますか?集中力の欠如は、Chuqianは、もはやアイデアに焦点を当てていないだろう答えを見て知識を習得するための時間を持っていたので、それがあり、これは道路プログラマーにさらに行くためには、確かではないことは理解する必要があり、この問題の解決策離れて、さらにさらにとするようにあなたは、知りませんが、またしても優れている方法を比較するために、この方法の原理はどこから来るのかをよりよく理解された方法により原則と慣行。

このような問題のために、インターネットは答えをたくさん持っている、私は要約するだけでここにいる、ほとんどの部分は転載に属し、私はあなたが理解し、論理的思考に集中したいので、あなただけの権利を支援するために、読書を主張願っています。

1)再文字列に

トラバーサル1.for

主なアイデアは:まず、新しい空の文字列は、その後、以下のように条件判定フラグを宣言した後、ループのための文字列を入力し始めたフラグループの後、中1の値、およびforループのループのために、新しい文字列ループ内を循環し、次いで決意が与えられ、同じ、フラグ= 0の場合、ループのうち、文字を表すないフラグの最終的な判断、1の場合は、新しい文字列の周期で登場しました0の場合、何も処理、スキップしていない、と新しい文字列の値を返します、そして、新しい文字列に文字を追加します。

2つのトラバースの実装、パフォーマンスのより多くの消費が、我々はまた、テストデータを学ぶことができるので、この方法では、推奨されません。この方法は、比較的時間がかかります。

コードは次のように実装されています。

関数removeRepeatStr(STR){
VAR NewStrによってすでに= '';
VARフラグ。
VARさlen = str.length。
{(; iはLEN <I ++がVAR I = 0)のための
フラグ= 1。
VAR NEWLEN = newStr.length。
{(; J <NEWLEN J ++ VAR J = 0)のための
IF(STR [I] == NewStrによってすでに[J]){
フラグ= 0。
ブレーク;
}
}
もし(フラグ){
NewStrによってすでに= NewStrによってすでに+ STR [I]。
}
}
NewStrによってすでに返します。
}
2)のindexOf方法(无兼容问题)

主なアイデア:作成するには、空の文字列、トラバーサル入力の横断の後、文字列形式で、その後、トラバーサル文字は、新しい文字列の最初の時間であるかどうかを判断し、もしそうであれば、空の文字に追加しました文字列、そうでない場合、スキップ、-1。最後に、新しい文字列を返します。

本質的には、この方法は、最初のと大きな違いはありませんが、初めての条件かどうかの審査員となり、この方法は、本質的であるためのindexOfもトラバースの形式で文字列内の文字を見つけます文字列の最初の発生の位置は、文字列が見つからない場合、-1を返します。消費が比較的パフォーマンスですので、したがって、この方法は、あまりお勧めしません。迅速に直接インデックス値などの文字を検索します。

コードは次のように実装されています。

関数removeRepeatStr(STR){
VAR NewStrによってすでに= '';
VARさlen = str.length。
用(VAR i = 0; iがLEN <; iは++){
(newStr.indexOf(STR [I])== - 1)であれば{
NewStrによってすでに= NewStrによってすでに+ STR [I]。
}
}
NewStrによってすでに返します。
}
3)検索方法

主なアイデア:第二の方法、検出方法の変化のみに沿っています。IndexOfメソッドは、我々はindexOfメソッドは文字列内に見つからない場合は、最初に発生した文字列内の文字の位置を見つける文字列を横断する場合、または-1ことを知って、検索方法になろうとしている。そして検索このような方法は、サブ指定された検索文字列のために、または正規表現に一致する部分文字列を取得し、です。いいえ、任意の部分文字列に一致する場合、または-1。

第二の方法は、比較的少し良く、話しているが、これは少しだけです。

コードは次のように実装されています。

関数removeRepeatStr(STR){
VAR NewStrによってすでに= '';
VARさlen = str.length。
用(VAR i = 0; iがLEN <; iは++){
(newStr.search(STR [I])== - 1)であれば{
NewStrによってすでに= NewStrによってすでに+ STR [I]。
}
}
NewStrによってすでに返します。
}
4)对象属性

主なアイデアは、新しいヌルオブジェクトと入力トラバーサルの空の文字列、文字オブジェクトのトラバーサルを作成し、1のプロパティ値として、属性値(すなわち、すべての配列要素を繰り返すかどうかのオブジェクトによって決定されますARR要素の横断は、この時点で、現在のオブジェクトの属性がすでに存在するかどうかを最初のオブジェクトのプロパティとして決定されたオブジェクト)を要素に入れていない、そうでない場合は、に追加することに留意する必要があります新しい文字列。そうすれば、スキップします。最後に、新しい文字列を返します。

これをよりよく理解するために、私は解釈も理解することは比較的困難である二つの場所に焦点を当てます。

第一:(!のObj [STR [I]]){}場合、私はちょうど説明した判定コードは、この条件は、オブジェクトのプロパティの値を決定し、STR [i]はオブジェクトのプロパティである、オブジェクトのプロパティの値であれば値はありません、現在の文字列内に堆積、存在し、それは、プロパティが既にオブジェクト内に存在示します。

第二:符号割り当て、OBJ [STRの[私は]、オブジェクトがない割り当て、デフォルト値が未定義オブジェクトのプロパティである場合、このプロパティは、値を持って保証することです。

次のジョイント理解は次のとおりです。最初の文字を横断するとき、およびオブジェクトは最初は空なので、オブジェクトの属性として最初の文字は、それが値なし、値なし、未定義、すなわちOBJ [にそれはデフォルトである場合すなわち決意文OBJ [STR [0]] == fasleそうであれば、STR [0]] ==未定義、ステートメントで決定され、デジタル式、または0に変換する場合、falseに変換未定義ですあなたがいない場合(!OBJ [STR [0]])==(真)であれば、それは、最初の文字列内に堆積された次の文を実行し、[STR [0]]の割り当てをobjに同等または未定義の割り当て、スキップしていない、または重複排除効果を達成できないだろう文字列の中に堆積され、要素を複製するためにトラバースするまで待ちます。割り当てた場合、OBJ [STR [0] = 1、文が非の前にそこ(、そして、あなたが戻って本を読まなければならない真回し理由を理解していないここに)真の値に変換し、されることが決定されいいえ、それは結果の文は偽で、それは次のステートメントを実行しないであろう、とスキップ動作を実現すると判断され、また、重複排除の結果に達しました。

この方法は、時間を節約するために、ただ、それにトラバースのすべてをプロパティ名ではないと一致するように、内部のオブジェクトのプロパティ値を見つけるために、すべての後に、上記のいくつかの方法よりも優れています。

コードは次のように実装されています。

removeRepeatStr関数(STR){
VAR OBJ = {};
VAR NewStrによってすでに= '';
VARのLEN = str.length;
のための(VARのI = 0; IがLEN <; Iは++){
(!OBJ [STR [I])IF {
NewStrによってすでにNewStrによってすでに+ STR = [I]、
OBJ [STR [I] = 1; //ここでの目的は、プロパティの割り当てを与えることであることに注意し、この値を任意に取ることができます。これは、属性の一意性を保証するために、オブジェクトのプロパティとして格納された各文字を横断し、割り当てることを意味する
}
}
;リターンNewStrによってすでに
}
2)アレイの重複排除

1.indexOf方法

主なアイデア:似た重量の上記の文字列で行くことに。新しい空の配列を作成し、その後、新しい配列が要素を横断していない場合は、新しい配列に追加し、渡される配列を横断し、その場合、スキップします。最後に、重複した配列要素の自由である新しい配列を返します。

類似文字列との分析の前に、この方法はまた、より多くの時間がかかり、リソースの無駄です。

コードは次のように実装されています。

関数removeRepeatArrElement(ARR){
VAR newArr = [];
VAR LEN = arr.length。
用(VAR i = 0; iがLEN <; iは++){
IF(newArr.indexOf(ARR [I])== - 1){
newArr.push(ARR [I])。
}
}
戻りnewArr。
}
2.对象属性

主なアイデアは:ここではそれらを繰り返さないで、類似文字列で重い行きます。とにかく、サイクルとのindexOfメソッドのダブルよりも良いです。

コードは次のように実装されています。

removeRepeatArrElement関数(ARR){
VAR OBJ = {};
VAR newArr = [];
VAR LEN = arr.length;
{(; IがLEN <I ++はVAR I = 0)のための
(OBJ [ARR [I]]!)IFここで{//属性は、オブジェクト、すなわち、()obj.hasOwnProperty(ARR [I]!)場合があるかどうかを決定することができる
newArr.push(ARR [I])を、
OBJ [ARR [I] = trueに。
}
}
newArrを返す;
}
3.forサイクル

主なアイデアは、:、新しい配列に移動を繰り返していない場合、すなわち、個々の配列要素を繰り返すことに直面したとき、移動しない別の配列に移動しました。

このことは、大きなパフォーマンス・オーバーヘッド、サイクルの二重を使用するため、10の各々からそのようなiおよびjとして、I、及びトラバーサル内部IにJを横断するとき、その後100回のトラバースの総数、すなわち、であるための方法は、推奨されません場合J 1,2,3,4,5,6,7,8,9,10を採取し、I = 0、とするとき、I = 10になるまで10の値を取った行っI = 1、J 、最後まで= 10、J、およびパフォーマンスはかなり時間がかかります。iが= 1、2-9を取るjは...;すなわち、i = 0のときjは1-9を取るとき、そしてここで、その繰り返しの後ろの要素かどうかを見つけるための最初の時間のマッチング要素であるとき場合I = 8、9を取るJ;場合、I = 9とき、jが小さい値が未定義であるとるので、決意が偽で、要素の最初のインデックス値9(第10要素)の直接出力。

コードは次のように実装されています。

関数removeRepeatArrElement(ARR){
VAR newArr = [];
VAR LEN = arr.length。
VARフラグ。
{(; iはLEN <I ++がVAR I = 0)のための
フラグ=真。
用(VARのJ = I; J <LEN-1; J ++){
IF(ARR [I] == ARR [J + 1]){
フラグ= FALSE。
ブレーク;
}
}
(フラグ){もし
newArr.push(ARR [I])。
}
}
戻りnewArr。
}
 

4.value - >キー方法

主なアイデア:名前が示唆するように、繰り返さ要素が除去され、キーの別の配列の配列に値を代入し、その後重複除外の結果として、新しい配列のキーを取ることです

コードは次のように実装されています。

removeRepeatArrElement関数(ARR){
VAR newArr = [];
VARのTEMP = [];
(TEMPでVAR I){ため
。TEMP [ARR [I] = 1;
}
(TEMPでVAR I)のために{
newArr.push(I );
}
newArrを返す;
}
ただし、注意すべきこの方法事は、出力アレイの要素が代わりに数タイプまたは他のタイプの文字列の形で与えられることです。あなたがしたいデータの種類を取り戻すために、だから、それはさらに後処理ます。

 

5.sort()メソッド

主なアイデア:まず、配列をソートして、ソート私たちは皆知っている、同じ要素が一緒になり、そして同じがスキップされている場合、2つの隣接する要素を比較することで、その後のサイクルは、同じであり、異なる場合の追加新しい配列へ。

コードは次のように実装されています。

removeRepeatArrElement関数(ARR){
VAR NEWARRAY arr.sort =();
VAR newArr = [];
VAR LEN = newArray.length;
のための(VARのI = 0; IがLEN <; Iは++){
!IF(NEWARRAY [I] = NEWARRAY [I + 1]){
newArr.push([NEWARRAY [I]);
}
}
}
newArrを返す;
}
はconsole.log(removeRepeatArrElement([12,4,3,5,6,23,4,5、 6])); // [12、23、3、4、5、6]
私はテストライン以下、我々は、重複数が除去されたことを確認することができ、そして出力[12、23、3、4、 5、6]。

しかし、ここで私は疑問であった:デフォルト機能なしソート()メソッドブラケット、(文字符号化順序に従って出力)の出力を上昇されるので、今出力である[12、23、3、4、5、6]代わりに[3、4、5、6、12、23]。

JSとJSネイティブのソートアルゴリズムソートアルゴリズム:興味のある学生は、他のネイティブのJ sのソート実装コードについて学ぶことができた場合は、以下のリンクを参照することができます。

最後のポイントは、また、学生はデエンファシス方法、オブジェクト属性の時間値がプロパティメソッドを決定するためにオブジェクトをなぜ疑問を持っている場合、オブジェクトは、角括弧内のプロパティを取るために使用された時点ではなく、知らない、言及されています方法?

ドット構文とブラケティングはまだ差がある理由は次のとおりです。

方法を指していないが図1に示すように、ブラケットは、変数name属性として使用することができます。

2、ブラケティングは、数値属性名ではなく、ドット構文として使用することができます。

図3は、属性名ではなく、ドット構文(変数または属性に予約語またはキーワードを使用しないように)ようにブラケットJSキーワードと予約語で使用することができます。

それは角括弧内のプロパティ内のオブジェクト、より実用的な方法を取ることができることを確実にするために。

6.ES6新機能:設定されたデータ構造

基本的な使い方:ES6は新しいデータ構造のセットを提供します。これは、配列に類似しているが、メンバーの値は、重複する値が一意ではありません。

自分自身を設定した設定データ構造を生成するコンストラクタです。

コール:

新しい新しいセットSET =定数([1、2、3、4、4]);
はconsole.log(SET)//は[1,2,3,4]
そうとすぐにES6を学ぶことであると、言って、特に便利ではありません〜
---------------------

おすすめ

転載: www.cnblogs.com/liangyh55/p/11334645.html
おすすめ