javascriptのIteration系の関数をメインで使うことが多いので纏めておくことにした。
forEach 関数
イテレーションの基本
> [1,2,3,4].forEach(function(e){console.log(e*2) } ) 2 4 6 8
map 関数
配列の各要素を変換する基本。
> [1,2,3,4].map(function(e){ return e*2 } ) [ 2, 4, 6, 8 ]
reduce 関数
配列の全要素を集計する基本。
> [1,2,3,4].reduce(function(v,e){ return e+v }, 0) 10
この場合、Callbacksの引数が重要。e と書いたのが、各要素(element)。
filter 関数
> [1,2,3,4].filter(function(e){ return e%2==0 }) [ 2, 4 ]
> [1,2,3,4].filter(function(e){ return e%2==1 }) [ 1, 3 ]
> [1,2,3,4].filter(function(e){ return e > 2 }) [ 3, 4 ] >
この場合、Trueを返した要素を全部選択する。
select / find という名前ではなく、 filter です。忘れないようにしないと。
every 関数
配列の全要素が、指定条件をちゃんと満たしているか調べる、
> [1,2,3,4].every(function(e){ return e > 5 }) false > [1,2,3,4].every(function(e){ return e > 1 }) false > [1,2,3,4].every(function(e){ return e > 0 }) true > [1,2,3,4].every(function(e){ return e > 3 }) false > [1,2,3,4].every(function(e){ return e > 0 }) true > [1,2,3,4].every(function(e){ return e > -1 }) true > [1,2,3,4].every(function(e){ return e < 10 }) true > [1,2,3,4].every(function(e){ return e < 0 }) false >
この辺は、map があれば充分な気もします。
reduceRight関数
reduce の逆順の動作。reverse して reduce する感じ。ax=xa が成立しないときに使うんだけど、単純積や単純な積算だと正順も逆順の結果が変わらないと思うの。。。
せいぜい、多次元配列(行列)の計算の時に使うくらいしか思いつかない。
some
どれか一つでも条件を満たしていればOK
アルファベットを含むかどうか
> "password".split('').some(function(c){ return c>="A" && c<="z" }) true
大文字のアルファベットを含むかどうか
> "password".split('').some(function(c){ return c>="A" && c<="Z" }) false
小文字のアルファベットを含むかどうか
> "password".split('').some(function(c){ return c>="a" && c<="z" }) true
数字を含むかどうか
> "password".split('').some(function(c){ return c>="0" && c<="9" }) false
数字を含むかどうか
> "Passw0rd".split('').some(function(c){ return c>="0" && c<="9" }) true
ここまで来ると、MapしてReduceした方がいいような気もします。
JavaScriptのforEach関数。
一般的なブラウザでは基本的に動くので便利です。
iteratorのmap/reduce/fiterなどはもっと積極的に使われても良いと思うのですが。 某巨大ライブラリの$.map(function(index,elem){ } )が使われていて残念な気もします。
参考資料
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/reverse
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/reduceRight