問題の「ヘビーに配列を」遭遇練習やインタビューでは、私たちはしばしば、次のステップは、重複排除のjsの配列を達成するための様々な方法を使用することです。
1.構造ES6が提供する援助を設定します
VaRの ARR = [1,1,2,2,3,3,4,4,5,5,4,3,2,1,1,1 ]; にconsole.log(ARR); // [1 ,. 1。 、2,2 ,. 3 ,. 3 ,. 4 ,. 4 ,. 5 ,. 5 ,. 4 ,. 3,2 ,. 1 ,. 1 ,. 1] 機能noRepeat11(ARR){ VAR newArr = []; のvar MYSET = 新しい新しいセット(ARR)。// 重複データ特性を受信しないセットの構造を使用 するための(VAR MYSETのヴァル){ newArr.push(ヴァル)は } 戻りnewArrを; } VARの ARR2は=であるnoRepeat11(ARR) はconsole.log(ARR2である); // [1、 2、3、4、5]
配列インデックス内を循環この要素の最初の発生の位置指標を決定するのindexOf()メソッドによって2.等しいです。
VaRの ARR = [1,23,1,1,1,3,23,5,6,7,9,9,8,5,5,5 ]; にconsole.log(ARR); // [1、23であります。1 ,. 1 ,. 1 ,. 3、23 ,. 5 ,. 6 ,. 7 ,. 9 ,. 9 ,. 8 ,. 5 ,. 5 ,. 5]である 機能noRepeat2(ARR){ 用(VARの I = 0; I <arr.length; I ++は) { IF(arr.indexOf(ARR [I])!= {I) arr.splice(I、 1); // 配列の配列長の要素マイナス前方の背後に一つの要素を削除 i--を; // 配列の添字バックオフ } } 戻りARR; } VAR newArr = noRepeat2(ARR) はconsole.log(newArr); //[1、23、3、5、6、7、9、8]
3.フィルタアレイを使用する方法
VaRの ARR = [ 'りんご'、 'バナナ'、 '梨'、 'りんご'、 'オレンジ'、 'オレンジ' ]; console.log(ARR) // [ "APPLE"、 "バナナ"、 "ナシ"、 "りんご"、 "オレンジ"、 "オレンジ"] VAR newArr = arr.filter(関数(値、指数、自己){ リターン self.indexOf(値)=== 指数; }); console.log(newArr)。 // [ "りんご"、 "バナナ"、 "梨"、 "オレンジ"]
サイクルは、新しいアレイに追加のインデックスに等しい場合、新しいアレイが現在の要素のindexOf正方配列インデックスによって決定される4.
た [1,23,1,1,1,3,23,5,6,7,9,9,8,5,5,5 = ARR ]。 console.log(ARR) // [1、23、1、1、1、3、23、5、6、7、9、9、8、5、5、5] 機能noRepeat4(ARR){ た Kが= []。 用(i = 0; I <arr.length; iは++ ){ 場合(arr.indexOf(ARR [I])== I){ ret.push(ARR [I])。 } } を返します右。 } た ARR2 = noRepeat4(ARR)。 console.log(ARR2)。 // [1、23、3、5、6、7、9、8]
すでにを通じて配列要素に格納された新しいオブジェクトを記録するスペースの使用
VaRの ARR = [1,23,1,1,1,3,23,5,6,7,9,9,8,5 ]。 console.log(ARR) // [1、23、1、1、1、3、23、5、6、7、9、9、8、5] VAR OBJ = {}; VAR newArr = []; 用(VAR ; I <arr.length; I = 0 iは++ ){ 場合(!OBJ [ARR [I]]){ OBJ [ARR [I] = 真。 newArr.push(ARR [I])。 } } にconsole.log(newArr)。 // [1、23、3、5、6、7、9、8]
新しいアレイと6は、存在する場合、この配列のどの要素が新規配列の存在のために添加されていないか否かを新たな要素を判断します
VaRの ARR = [1,23,1,1,1,3,23,5,6,7,9,9,8,5 ]。 console.log(ARR)。 // [1、23、1、1、1、3、23、5、6、7、9、9、8、5] 機能noRepeat6(ARR){ VAR newArr = []; 用(VAR i = 0; I <arr.length; iは++ ){ 場合(newArr.indexOf(ARR [I])== -1 ){ newArr.push(ARR [I])。 } } 戻りnewArr。 } VAR ARR2 = noRepeat6(ARR)。 console.log(ARR2)。 // [1、23、3、5、6、7、9、8]
新しいアレイと7は、この要素は新しい配列内の新しい配列(同一の長さが、元の配列が文字列の順にソートされている)に添加された場合、要素の存在は、存在しないか否かを判定する
VaRの ARR = [1,23,1,1,1,3,23,5,6,7,9,9,8,5 ]; にconsole.log(ARR); // [1、23 ,. 1 ,. 1 、1 ,. 3、23 ,. 5 ,. 6 ,. 7 ,. 9 ,. 9 ,. 8 ,. 5]である。 関数noRepeat7(ARR){ VARの RET = []、 END; // 比較のために繰り返さ一時変数要素 arr.sort()。// 多数の再順序付けグループ エンドARRを= [0 ]; ret.push(ARR [ 0 ]); のため(VAR I = 1; I <arr.length、私は++ ){ IF(!ARR [I] =終了) { // 現在の要素の要素IFおよび新しいアレイに一時的な追加にこの要素を変化させる ret.push(ARR [I]); 終了= 編曲[I]。 } } を返します右。 } た ARR2 = noRepeat7(ARR)。 console.log(ARR2)。 // [1、23、3、5、6、7、8、9]
8.ダブルサイクリック元の配列を変更します
VaRの ARR = [1,1,2,2,3,3,4,4,5,5,4,3,1,2,6,6,6,6 ]。 console.log(ARR)。 // [1、1、2、2、3、3、4、4、5、5、4、3、1、2、6、6、6、6] 機能noRepeat9(ARR){ ため(VAR I = 0; I <arr.length; iは++ ){ 用(VARの J = 0; J <arr.length; J ++ ){ もし!(ARR [I] == ARR [J] && I = J){ // 将后面重复的数删掉 arr.splice(J、1 )。 } } } 戻りARR。 } VAR ARR2 =noRepeat9(ARR)。 console.log(ARR2)。 // [1、2、3、4、5、6]
9.、他の要素との比較を行い、重複する要素を見つけるために、配列の各要素は、削除します
VaRの ARR = [1,23,1,1,1,3,23,5,6,7,9,9,8,5,5,5,5 ]。 console.log(ARR)。 // [1、23、1、1、1、3、23、5、6、7、9、9、8、5、5、5、5] 機能noRepeat1(ARR){ ため(VAR I = 0。 iがarr.length-1 <; Iは++ ){ ため(VARの J = I + 1、J <arr.length; J ++ ){ 場合(ARR [I] === ARR [J]){ arr.splice(J、 1 ); J - ; } } } 戻りARR。 } VARARR2 = noRepeat1(ARR)。 console.log(ARR2)。 // [1、23、3、5、6、7、9、8]
新しい配列で10
VaRの ARR = [1,1,2,2,3,3,4,4,5,5,4,3,2,1,1,1 ]; にconsole.log(ARR); // [1 ,. 1。 、2,4 ,. 3 2 ,. 3 ,. 3 ,. 4 ,. 4 ,. 5 ,. 5 ,.、2 ,. 1 ,. 1 ,. 1] VAR newArr = []; のための(VARの I = 0; I <arr.length; I ++は) { VAR repArr = []; // 繰り返しの添え字であることが後でデータを受信 // 重複データ添え字を識別するための内部ループ のための(VARの Jは= I + 1、。J <arr.length; J ++ ){ IF(ARR [I] == ARR [J]){ repArr.push(J); // インデックス後にデータ重複見つける } } // はconsole.log(repArr)を、 IF(repArr.length == 0){ // 値が繰り返された場合、配列データは、その重複した説明はない 。newArr.push(ARR [I]) } } ;にconsole.log(newArr) // [5 ,. 4 ,. 3。 2、1]