配列項目の重複したエントリを削除します。戻り値は削除された重複した項目のみを含む新しい配列です。


今日はbluedieaでtaobaoのオンライン募集を見ました。タオバオの技術はまだ素晴らしいと信じています。第三問題になった時、私は長い間カードを押しました。できないわけではありません。簡単な方法があると思いますが、自分では思いつかないので、九牛二虎の力を使ってやっと本題を完成しました。他の自分が満足できる答えを提供しました。皆様のご指導を歓迎します。タイトルは次の通りです。Arayローカルオブジェクトにプロトタイプ方法を追加してください。その用途は配列エントリの重複したエントリを削除することです。戻り値は削除された重複エントリのみを含む新しい配列です。script type=「text/javascript」><!--Aray.prototype.delRepeat=function(){/temparr:重複エントリフラグ,tempar 1:重複配列項目var temparr=[],tempar 1=[],j=0を保存します。配列for(var i=this.length)を巡回します。i>0i--){/もしこの項が重複していないならif(!temparr[this[i-1]){temparr[this[i-1]=1この項目は関連配列によってマークされていて、1(1回の出現を表す)}else{if(temparr[this[i-1]+==1)tempar 1[j+]=this[i-1];最初の繰り返しの場合は、この重複項を保存し、繰り返しフラグ+1 this.splice(i-1,1)を返します。元の配列からこの項目を削除します。重複項目リスト'var a=new Aray(5,410,52,",",24,5,",",",true,false,24,25,5)alertを返します。alert(「重複項:」+a.delRepeat();alert(「残りの項目:」+a)//-[Ctrl+A全選択注:]

Array.prototype.delRepeat=function() 
  { 
        var tmpArr=[],rs=[],i,val; 
        for(i=this.length;i>0;i--) 
    { 
            val = this[i-1]; 
      if(!tmpArr[val]) 
      { 
                tmpArr[val]=1; 
            }else 
      { 
                rs.push(val); 
          this.splice(i-1,1); 
            } 
        } 
    tmpArr = null; 
        return rs; 
    } 
の2つの利点:1、予めthis[i-1]を変数valに保存し、アクセス数を減らす。2、array.push方法を使って、配列長を変数で保存する方法を交替します。いいです一つほめてくださいついでに重複項に戻るフィルタリングも実現しました。題意の理解にはずれがあるかもしれません。