2011-02-02 6 views
1
Array.prototype.remove = function (obj) { 
    for(var i = 0; i < this.length; i++) { 
     if(this[i] === obj) { 
      if (i == this.length) { 
       this[i] = null; 
      } else { 
       for(var j = i; j < this.length-1; j++) { 
        this[j] = this[j+1]; 
       } 
       delete this[j]; // updated from this[j] = null; still not working. 
      } 
     } 
    } 
    return this; 
}; 

でそれを呼び出す:私の削除機能で何が問題になっていますか?

write("ARRAY TEST = " + [22, 33, 44].remove(33).remove(22)); 

..itプリント:

44,, 

なぜこの2つのカンマとどのようにもコンマを削除するには、私のremove関数を修正するには?

答えて

3

delete要素は削除されません、それはundefinedに設定します。そして、undefinedが印刷されると空の文字列になるので、結果はwrite()となります。

要素を削除するには、splice()を使用する必要があります。あなたは(あなたが古いブラウザのためにそれを定義する必要があります)indexOfとそれを組み合わせる場合は、かなり短いの機能を得る:

Array.prototype.remove = function (obj) { 
    this.splice(this.indexOf(obj), 1); 
    return this; 
} 

PS:私はネイティブのプロトタイプを拡大するの提唱者ではないよ...

+0

+1 – user113716

+0

これは動作します。私はちょうど[この文書](http://www.w3schools.com/jsref/jsref_slice_array.asp)がスライスの第2引数が実際には「長さ」ではなく「終わり」であると言っているのは奇妙だと思った。 –

+0

@Tom MDNに将来参照するには、w3schoolsは古く、誤った情報がたくさんあります。 –

-1
Array.prototype.remove = function (obj) { 
    for(var i = 0; i < this.length; i++) { 
     if(this[i] === obj) { 
      if (i == this.length) { 
       #this[i] = null; 
       delete this[i]; 
      } else { 
       for(var j = i; j < this.length-1; j++) { 
        this[j] = this[j+1]; 
       } 
       #this[j] = null; 
       delete this[i]; 
      } 
     } 
    } 
    return this; 
}; 

はかなり確信して、それはあなたがあなたがちょうどそれらをnullに設定し、配列から要素を削除しない

+1

I 'delete this [j]'を意味すると思いますが、動作しません。コンマはまだそこにあります。 –

+0

-1 deleteは配列から要素を削除しません。(http://stackoverflow.com/questions/206988/どのように私はアンザイゼット配列の要素のjavascript) – Damp

+0

ああ、右。私はオブジェクトから削除を考えていた。 ><"P.S。" *; o)以外のすべての場合は、< – JohnO

0

を望むものです。 インスピレーションが必要な場合は、このremoveメソッドを見てください。それは要素ではなくインデックスによるものです。

http://ejohn.org/blog/javascript-array-remove/

試してみてください。

Array.prototype.remove = function (obj) { 
    for(var i = 0; i < this.length; i++) { 
     if(this[i] === obj) { 
      if (i == this.length) { 
       this.splice(i,1); 
      } else { 
       for(var j = i; j < this.length-1; j++) { 
        this[j] = this[j+1]; 
       } 
       this.splice(j,1); 
      } 
     } 
    } 
    return this; 
}; 
1

がnullに項目を設定するあなたはまだコンマを参照してください理由である、(それがnullの項目です)配列内のアイテムを残します。

1

前述のように、項目を削除またはnullに設定すると、項目は配列内に残ります。あなたが使用したいことはArray.splice

はここで動作するはずの実装ですされていますArray

Array.prototype.remove = function (obj) { 
    for(var i = 0; i < this.length; i++) { 
     if(this[i] === obj) 
     { 
      this.splice(i,1); 
      break; 
     }  
    } 
    return this; 
}; 
関連する問題