var arr = [1,2,3,4,5,6,7] var map = []; var subarray = []; for(var i = 0、len = arr.length; i <len; i ++){ var item = arr [i]; //何かをする アラート(アイテム); //マップとサブ if(/ *何らかの条件* /){ map.push(アイテム+1); subarray.push(アイテム) } }
ただし、ECMA-262 [1]およびほとんどのフレームワークは、これを達成するための代替(よりエレガントな)方法をサポートしています。
var arr = [1,2,3,4,5,6,7] arr.forEach(関数((要素、インデックス、配列){アラート(要素);}) var map = arr.map(function((element、index、array){ if(/ *何らかの条件* /) 戻り要素。 }) var subarray = arr.filter(function((element、index、array){return / * some condition * /})
配列メソッドを呼び出して、パラメーター(要素/ *配列要素* /、インデックス/ *この要素のインデックス* /、配列/ *配列自体* /)を持つ各配列要素に対して呼び出される関数(クロージャ、クロージャ、ラムダ)を渡します。 マップおよびフィルター関数の場合、関数が返すもの(マップの場合)または関数がtrueを返す要素(フィルターの場合)で満たされる新しい配列が作成されます。
これらの関数の2番目のパラメーターはthisObjectオブジェクトに渡すことができます。このオブジェクトは、実行中に関数の内部に隠されます)[ 1 ]:
var writer = { sb:[]、 書き込み:関数(s){ this.sb.push(s); }、 writeln:関数(s){ this.write(s + "\ n"); }、 toString:function(){ return this.sb.join( ""); } }; [2、5、9] .forEach(writer.writeln、writer); print(writer.toString()); //印刷がすでに定義されていると仮定します
ブラウザがこれらの機能をサポートしていない場合は、自分で定義できます[ 2 ]。
if(!Array.prototype.forEach) { Array.prototype.forEach = function(fun / *、thisp * /) { var len = this.length; if(typeof fun!= "関数") 新しいTypeErrorをスロー(); var thisp = arguments [1]; for(var i = 0; i <len; i ++) { if(この中のi) fun.call(thisp、this [i]、i、this); } }; } if(!Array.prototype.filter) { Array.prototype.filter = function(fun / *、thisp * /) { var len = this.length; if(typeof fun!= "関数") 新しいTypeErrorをスロー(); var res = new Array(); var thisp = arguments [1]; for(var i = 0; i <len; i ++) { if(この中のi) { var val = this [i]; // funがこれを変更する場合 if(fun.call(thisp、val、i、this)) res.push(val); } } 解像度を返す; }; } if(!Array.prototype.map) { Array.prototype.map = function(fun / *、thisp * /) { var len = this.length; if(typeof fun!= "関数") 新しいTypeErrorをスロー(); var res = new Array(len); var thisp = arguments [1]; for(var i = 0; i <len; i ++) { if(この中のi) res [i] = fun.call(thisp、this [i]、i、this); } 解像度を返す; }; }
フレームワークの中で、これらの機能の最も文学的サポートはdojoで行われます。 関数名が仕様に一致し、サポートされていない場合は再定義されます。 残り(Ext、jquery、prototype)では、これらの関数は異なる名前と異なるバリエーションでサポートされています。