ホームページ >ウェブフロントエンド >jsチュートリアル >JS の Map と ForEach の違いは何ですか?

JS の Map と ForEach の違いは何ですか?

亚连
亚连オリジナル
2018-06-07 16:30:113189ブラウズ

この記事では、JS の Map と ForEach の違いと使用方法の違いについて詳しく説明します。これに興味のある友人は参照してください。

すでに JavaScript の経験がある場合は、一見同一に見える 2 つのメソッド、Array.prototype.map() と Array.prototype.forEach() をすでにご存知でしょう。

では、それらの違いは何ですか?

定義

まず MDN の Map と ForEach の定義を見てみましょう:

forEach(): 提供された関数を配列要素ごとに 1 回実行します。

map(): 呼び出し元の配列のすべての要素に対して指定された関数を呼び出した結果を含む新しい配列を作成します。

違いは何ですか? forEach() メソッドは実行結果を返しませんが、未定義です。つまり、forEach() は元の配列を変更します。 map() メソッドは新しい配列を取得して返します。

配列を以下に示します。その中の各要素を 2 倍にしたい場合は、map と forEach を使用して目的を達成できます。

let arr = [1, 2, 3, 4, 5];

ForEach

forEach は意味のある値を返さないことに注意してください。

コールバック関数内の arr の値を直接変更します。

arr.forEach((num, index) => {
 return arr[index] = num * 2;
});

実行結果は次のとおりです:

// arr = [2, 4, 6, 8, 10]

Map

let doubled = arr.map(num => {
 return num * 2;
});

実行結果は次のとおりです:

// doubled = [2, 4, 6, 8, 10]

実行速度の比較

jsPrefは、さまざまなJavaScriptの実行速度を比較するのに非常に優れたWebサイトです。機能。

forEach()とmap()のテスト結果は次のとおりです:

私のコンピュータでのforEach()の実行速度はmap()よりも70%遅いことがわかります。ブラウザの実行結果は人それぞれ異なります。次のリンクを使用してテストできます: Map vs. forEach - jsPref。

JavaScript は非常に柔軟なので、バグがあるかどうかわからないほど、オンラインでリアルタイム監視するために Fundebug に接続することもできます。

関数の観点から理解する

プログラミングで関数を使用することに慣れている場合は、必ず map() を使用することをお勧めします。 forEach() は元の配列の値を変更し、map() は新しい配列を返すため、元の配列は影響を受けません。

どれが良いですか?

何をしたいかによる。

forEach は、データを変更する予定はないが、データベースに保存したり印刷したりするなど、データを使用して何かをしたい場合に適しています。

let arr = ['a', 'b', 'c', 'd'];
arr.forEach((letter) => {
 console.log(letter);
});
// a
// b
// c
// d

map()はデータの値を変更したい場合に適しています。高速なだけでなく、新しい配列を返します。この利点は、合成 (map()、filter()、reduce() などの組み合わせ) を使用して、より多くのトリックを実行できることです。

let arr = [1, 2, 3, 4, 5];
let arr2 = arr.map(num => num * 2).filter(num => num > 5);
// arr2 = [6, 8, 10]

まず、map を使用して各要素を 2 倍し、次に 5 より大きい要素をフィルターで除外します。最終結果は arr2 に割り当てられます。

要点

forEach()が使えればmap()でもできます。その逆もまた真です。

map() は新しい配列を保存するためにメモリ空間を割り当ててそれを返しますが、forEach() はデータを返しません。

forEach() を使用すると、コールバックで元の配列の要素を変更できます。 map() は新しい配列を返します。

上記は私があなたのためにまとめたものです。

関連記事:

vue-cli で webpack2 プロジェクトのパッケージ化の最適化を実装する方法

vue のクロスドメイン処理の問題 (詳細なチュートリアル)

es6 のエクスポートとエクスポートのデフォルトの違いは何ですか?

以上がJS の Map と ForEach の違いは何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。