Sep 12, 2005
Firefox1.5でサポートされる新しいArrayのメソッド
について。
http://nanto.asablo.jp/blog/2005/09/04/62939
http://developer.mozilla.org/en/docs/Core_JavaScript_1.5_Reference:Global_Objects:Array#Methods
Array#forEach
Array#map
Array#filter
Array#every
Array#some
引数として、callback,thisObjを受け取る。配列の各要素に対してcallback関数を実行する。
callback関数はelement, index, arrayを受け取る。value,key,self。値、添え字、配列自身。
Array#forEach
配列の各要素に対してcallback関数を実行する
Array#map
callback関数の返値の配列を返す
Array#filter
callback関数の実行結果が真になった要素のみ集めた配列を返す
Array#every
callback関数の実行結果が全て真の場合にtrueを返す
Array#some
callback関数の実行結果が一つでも真の場合trueを返す
StringのindexOfと同じ要領。searchElementとfromIndexを受け取る。比較は===で行う。
Array#indexOf
searchElementが一番最初に出てくる添え字を返す。fromIndexで開始位置を変更できる。
Array#lastIndexOf
searchElementが一番最後に出てくる添え字を返す。fromIndexで開始位置を変更できる。
lastIndexOfの挙動が少しややこしくてfromIndexをプラスで指定して左端まで来ると右端で止まる。マイナスで指定する場合は左端で止まる。
解説がわかりづらいので、わかる人はコードで読んだほうが早いような気がする。
Firefox1.5をインストールして、挙動が同じになるのを確認してみたけど、callback関数で配列を破壊したときにどうなるのかとか、細かいチェックはしてない。一応、これであってるとは思う。
filterやeveryの条件は0とかnullとかundefinedでなければOK。return 1でも良い。
自分でmapとかeachとか作ってやってたけど、これに合わせてcallback関数の類はvalue,key,selfの順に受け取るような設計にしときたいところ。
ところでさいきん、{}を省略したりむやみに三項演算子を使ったりifの代わりに&&使ったりする病気になった。
http://nanto.asablo.jp/blog/2005/09/04/62939
http://developer.mozilla.org/en/docs/Core_JavaScript_1.5_Reference:Global_Objects:Array#Methods
ループ処理を便利にするメソッド
Array#forEach
Array#map
Array#filter
Array#every
Array#some
引数として、callback,thisObjを受け取る。配列の各要素に対してcallback関数を実行する。
callback関数はelement, index, arrayを受け取る。value,key,self。値、添え字、配列自身。
Array#forEach
配列の各要素に対してcallback関数を実行する
Array#map
callback関数の返値の配列を返す
Array#filter
callback関数の実行結果が真になった要素のみ集めた配列を返す
Array#every
callback関数の実行結果が全て真の場合にtrueを返す
Array#some
callback関数の実行結果が一つでも真の場合trueを返す
出現位置を探すメソッド
StringのindexOfと同じ要領。searchElementとfromIndexを受け取る。比較は===で行う。
Array#indexOf
searchElementが一番最初に出てくる添え字を返す。fromIndexで開始位置を変更できる。
Array#lastIndexOf
searchElementが一番最後に出てくる添え字を返す。fromIndexで開始位置を変更できる。
lastIndexOfの挙動が少しややこしくてfromIndexをプラスで指定して左端まで来ると右端で止まる。マイナスで指定する場合は左端で止まる。
他のブラウザで使うためのコード
解説がわかりづらいので、わかる人はコードで読んだほうが早いような気がする。
Firefox1.5をインストールして、挙動が同じになるのを確認してみたけど、callback関数で配列を破壊したときにどうなるのかとか、細かいチェックはしてない。一応、これであってるとは思う。
filterやeveryの条件は0とかnullとかundefinedでなければOK。return 1でも良い。
自分でmapとかeachとか作ってやってたけど、これに合わせてcallback関数の類はvalue,key,selfの順に受け取るような設計にしときたいところ。
Array.prototype.forEach = function(callback,thisObject){
for(var i=0,len=this.length;i<len;i++)
callback.call(thisObject,this[i],i,this)
}
Array.prototype.map = function(callback,thisObject){
for(var i=0,res=[],len=this.length;i<len;i++)
res[i] = callback.call(thisObject,this[i],i,this);
return res
}
Array.prototype.filter = function(callback,thisObject){
for(var i=0,res=[],len=this.length;i<len;i++)
callback.call(thisObject,this[i],i,this) && res.push(this[i]);
return res
}
Array.prototype.indexOf = function(searchElement,fromIndex){
var i = fromIndex<0 ? this.length+fromIndex : fromIndex || 0;
for(;i<this.length;i++)
if(searchElement === this[i]) return i;
return -1
}
Array.prototype.lastIndexOf = function(searchElement,fromIndex){
var max = this.length-1;
var i = fromIndex < 0 ? Math.max(max+1 + fromIndex,0):
fromIndex > max ? max : max-(fromIndex||0) || max;
for(;i>=0;i--)
if(searchElement === this[i]) return i;
return -1
}
Array.prototype.every = function(callback,thisObject){
for(var i=0,len=this.length;i<len;i++)
if(!callback.call(thisObject,this[i],i,this)) return false;
return true
}
Array.prototype.some = function(callback,thisObject){
for(var i=0,len=this.length;i<len;i++)
if(callback.call(thisObject,this[i],i,this)) return true;
return false
}
ところでさいきん、{}を省略したりむやみに三項演算子を使ったりifの代わりに&&使ったりする病気になった。
WriteBacks
配列に要素を挿入するメソッドっていつになったら実装されるんですか?それともすでにあるんですかね?今のところ、僕はそういうメソッドをしらないので、slice, concatを使ってそれを実現しています。
Posted by at 2005/09/13 (Tue) 06:25:30
1.俺に聞かれても困る
2.すでにある
3.splice
Posted by mala at 2005/09/13 (Tue) 07:06:19
http://la.ma.la/blog/diary_200509122347.trackback
writeback message: Ready to post a comment.

