Array.remove - JavaScriptで指定した値を配列から削除処理
2007年6月21日(木) 19:20JavaScriptには配列中の特定の値を削除する処理が用意されていない。Array.shiftを利用した場合、先頭要素しか削除できないので何かと不便。JavaScriptからstyle.classNameなどを操作する場合を想定して、特定の値を配列中から削除できるArray.remove処理を実装してみる。
1つ注意しておきたいのは、すでに実装済みのコード中にfor(x in array){..}を利用している場合、下記のprototypeが追加されることで弊害が出る。配列オブジェクトのプロパティをすべて参照してしまうので、追加されたfunctionも参照される結果となり、エラーとなる。この場合、Array.lengthを参照する形式に変更すればよい。
配列内の検索と削除処理の実装
配列オブジェクトに対してprototypeとして作成する。
<script type="text/javascript">
Array.prototype.indexOf = function(value){
var i = this.length;
while(i){
if(this[--i] == value) return i;
}
return -1;
};
Array.prototype.remove = function(value, cap){
var i = this.length; var a;
while(i--){
if(value.indexOf(a = this.pop()) == -1) this.unshift(a);
}
return (cap)? this.join(cap) : this;
};
</script>
classNameから配列指定した値を削除する
id="elem" class="left right clear"に対して、下記のコードを実行すると、class="left"となる。
<script type="text/javascript">
var obj = document.getElementById('elem');
obj.className = obj.className.split(/\s+/).remove(['right','clear'], ' ');
</script>Array.remove()を呼び出す際に、2つめのパラメータを指定できるようにしてあり、上記では配列を' '(スペース)で連結して、文字列として取得している。非常に単純なコードだが、JavaScriptからclassNameを操作する際に利用しやすくしてある。Array.mergeとあわせて利用すれば、追加・削除を間単に実装できる。
関連する記事
- ieFixed HTC - min-width max-widthをIE6で利用する
- Alpha Transparency PNG - VMLでアルファチャンネルを含むPNG表示
- Scroll RSS Icon - スクロールに連動するRSSアイコンの作り方
- Breadcrumb CSS - Appleに習うパンくずデザインCSS
- Array.remove - JavaScriptで指定した値を配列から削除処理
- Array.merge - JavaScriptで2つの配列をマージ処理
- scrollTop scrollLeft - ブラウザのスクロール状態を取得する
- CSSとJavaScriptでmin-width max-width を実装する

