.map、.every、.forEach の違いは何ですか?
-
27-10-2019 - |
質問
それらの違いは何だろうといつも疑問に思っていました。みんな同じことをしているように見えます...
解決
違いは戻り値にあります。
.map()
新しいオブジェクトの配列を返します 元のアイテムに対して何らかのアクションを実行することによって作成されます。
.every()
ブール値を返します - この配列内のすべての要素が提供されたテスト関数を満たす場合は true。との重要な違い .every()
それは、テスト関数が配列内のすべての要素に対して常に呼び出されるとは限らないということです。テスト関数がいずれかの要素に対して false を返すと、それ以上配列要素は反復されなくなります。したがって、テスト関数には通常、 副作用.
.forEach()
何も返しません - 配列内の各項目に対して指定されたアクションを実行する配列を反復します。
これらと他の多くのことについて読んでください MDN での配列反復メソッド.
他のヒント
gilly3 の答えは素晴らしいです。他のタイプの「要素をループする」関数について少し情報を追加したかっただけです。
.every()
(最初にfalseまたは何かの虚偽を返すときにループするのを停止).some()
(初めてiteratorが真実または何か真実を返すときにループを停止します).filter()
(フィルター関数がtrueを返す要素を含む新しい配列を作成し、falseを返す場所を省略します).map()
(Iterator関数によって返された値から新しい配列を作成します).reduce()
(以前の値を渡して、繰り返し反復因子を呼び出して値を構築します。詳細については仕様を参照してください。配列の内容や他の多くのものを合計するのに役立ちます).reduceRight()
(削減など、昇順ではなく降順で動作します)
クレジット:T.J.クラウダー JavaScript で配列に対する For-each は?
上記の優れた回答に対するもう 1 つの考慮事項は、連鎖です。forEach() ではチェーンできませんが、map() ではチェーンできます。
例えば:
var arrayNumbers = [3,1,2,4,5];
arrayNumbers.map(function(i) {
return i * 2
}).sort();
.forEach() を使用すると、.sort() を実行できず、エラーが発生します。
のために ラムダ, 、間の違い R.map()
そして R.forEach()
は:
R.forEach()
元の配列を返しますが、R.map()
functorを返しますR.forEach()
配列に対してのみ操作できますが、R.map()
オブジェクトを操作することもできます(つまり、オブジェクトのキー/値のペアは、配列のように扱われます)
所属していません StackOverflow