.map、.every、.forEachの違いは何ですか?


118

それらの違いは何だろうといつも思っていました。彼らはすべて同じことをしているようです...


6
誰かが考慮... jQueryのタグを追加everyし、forEachjQueryのメソッドはありませんが、私はそれが質問がどのような方法でのjQueryに関し、そうだと思います。developer.mozilla.org/en/JavaScript/New_in_JavaScript/1.6
James Allardice

このリンクには、あなたが探している答えがあるはずです。
zBomb

以前のコメントのリンクで詳しく説明されているように、新しいMozilla固有の配列メソッドを参照していると思いますか?
James Allardice、2011

@James- これらはMozilla固有ではありません。私もwebkitとopera docsへのリンクを共有しますが、それらが私の頭のどこにあるのかわかりません。
gilly3

@ gilly3-ああ、良い点。ただし、IE9でのみサポートされていると思います。
James Allardice、2011

回答:


224

違いは戻り値にあります。

.map() 元のアイテムに対して何らかのアクションを実行することによって作成されたオブジェクトの新しい配列を返します

.every() ブール値を返します。この配列のすべての要素が、指定されたテスト関数を満たしている場合はtrueです。との重要な違い.every()は、テスト関数が常に配列のすべての要素に対して呼び出されるとは限らないことです。テスト関数がいずれかの要素に対してfalseを返すと、それ以上配列要素は繰り返されません。したがって、テスト機能には通常副作用がありません。

.forEach() 何も返さない -配列内の各項目に対して特定のアクションを実行して配列を繰り返します

これらとMDNでの他の多くの配列反復法について読んでください。


あるいは、MDNを引用することもできます
JoshWillik

3
@josh-MDNを引用しました。各メソッド名は、MDNの対応するドキュメントにリンクされています。
gilly3

@ gilly3、お詫び申し上げます。青いテキストに目を通しました>。>
JoshWillik '26

.forEach()は何も問題を返しません。おそらく2012年にはなかったでしょうが、少なくともChromeでは2015年に、このarr2 = ['sue'、 'joe'、 'ben'、 'guy'、 'tom'、 'jonを試してください。 ']; b = arr2.forEach(function(el、indx){console.log(indx + ':' + el);}); console.log(b);
ジェイソン2015年

1
@EugeneMercer「元のアイテム」とは、配列の各要素の元の値を意味します。
gilly3

88

gilly3の答えは素晴らしいです。他のタイプの「ループエレメント」関数に関する情報を少し追加したかっただけです。

  • .every() (イテレータが最初にfalseまたは何か誤ったものを返したときにループを停止します)
  • .some() (イテレーターが真または何か真実を最初に返したときにループを停止します)
  • .filter() (filter関数がtrueを返す要素を含む新しい配列を作成し、falseを返す要素は省略します)
  • .map() (イテレータ関数によって返された値から新しい配列を作成します)
  • .reduce() (反復子を繰り返し呼び出して値を作成し、前の値を渡します。詳細については仕様を参照してください。配列の内容や他の多くの内容を合計するのに役立ちます)
  • .reduceRight() (reduceのようですが、昇順ではなく降順で機能します)

クレジット:JavaScriptの配列に対する TJCrowder For-each?


私から100のいいね!
シャミム

6

上記の優れた答えに対するもう1つの考慮事項は、チェーンです。forEach()では連鎖できませんが、map()では連鎖できます。

例えば:

var arrayNumbers = [3,1,2,4,5];

arrayNumbers.map(function(i) {
    return i * 2
}).sort();

.forEach()を使用すると、.sort()を実行できなくなり、エラーが発生します。


0

RAMDA、との違いR.map()とは、R.forEach()次のとおりです。

  1. R.forEach()元の配列をR.map()返し、ファンクタを返します
  2. R.forEach()配列のみを操作R.map()できますが、オブジェクトも操作できます(つまり、オブジェクトのキー/値のペアは配列のように扱われます)

問題は、Javascript言語に関連しています。Ramdaは素晴らしいものですが、まったく異なるトピックであり、ライブラリです。
SeaWarrior404
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.