JAvascriptにおける配列要素削除問題の議論

3494 ワード

var arr=['a','b','c'];
「b」を削除するには、次の2つの方法があります.
1.deleteメソッド:delete arr[1]
この方式では配列長が変わらずarr[1]がundefinedになったが、元の配列のインデックスも変わらないという利点もあり、この場合は配列要素を遍歴することで
for(index in arr)
document.write('arr['+index+']='+arr[index]);
このループ方式ではundefinedの要素をスキップします
*この方式IE 4.oこれからも応援します
2.配列オブジェクトsplice方法:arr.splice(1,1);
この方式では配列長は相応に変化するが,元の配列インデックスも相応に変化する.
spliceパラメータの最初の1は、削除された開始インデックス(0から計算)で、配列の2番目の要素です.
2番目の1は、要素を削除する個数であり、ここでは1つの要素、すなわち'b'のみを削除する.
この場合、削除された要素は
配列は保持されません
*本方法IE 5.5以降サポート
特筆すべきはspliceメソッドが配列要素を削除すると同時に、配列要素を追加することもできる
例えばarr.splice(1,1,'d','e'),d,eの2つの要素が配列arrに加わる
結果配列はarr:'a','d','e','c'になる
外編:
JavaScriptは配列のlength属性を設定ことによって配列を遮断する唯一の配列長を短縮する方法である.delete演算子を用いる配列中の要素を削除すると、その要素は未定義になるが、配列のlength属性は2つの削除要素を変更せず、配列長も変更する方法である.  /*
  *  :Array.remove(dx)
  *  : .
  *  :dx .
  *  :
  */
  
 // , .
 Array.prototype.remove=function(dx)
 {
  if(isNaN(dx)||dx>this.length){return false;}
  for(var i=0,n=0;i<this.length;i++)
  {
    if(this[i]!=this[dx])
    {
      this[n++]=this[i]
    }
  }
  this.length-=1
 }
 a = ['1','2','3','4','5'];
 alert("elements: "+a+"nLength: "+a.length);
 a.remove(0); // 0
 alert("elements: "+a+"nLength: "+a.length);
  
 /*
  *  :Array.baoremove(dx)
  *  : .
  *  :dx .
  *  : .
  */
  
 // splice .
  
 Array.prototype.baoremove = function(dx)
 {
  if(isNaN(dx)||dx>this.length){return false;}
  this.splice(dx,1);
 }
 b = ['1','2','3','4','5'];
 alert("elements: "+b+"nLength: "+b.length);
 b.baoremove(1); // 1
 alert("elements: "+b+"nLength: "+b.length);