--- title: Set.prototype.forEach() slug: Web/JavaScript/Reference/Global_Objects/Set/forEach tags: - ECMAScript 2015 - JavaScript - Method - Prototype - Reference - set translation_of: Web/JavaScript/Reference/Global_Objects/Set/forEach ---
{{JSRef}}

forEach() メソッドは、与えられた関数を Set オブジェクトの各値に対して一回ずつ、挿入順で実行します。

{{EmbedInteractiveExample("pages/js/set-prototype-foreach.html")}}

構文

mySet.forEach(callback[, thisArg])

引数

callback
各要素に対して実行する関数で、 3つの引数を受け付けます。
currentValue, currentKey
Setで現在 処理されている要素。 Set にはキー(key)がないため値(value)が両方に渡されます。
set
forEach() が呼ばれている Set オブジェクト
thisArg
callback を実行するとき、this として使用する値です。

返値

{{jsxref("undefined")}} です。

解説

forEach() メソッドは Set オブジェクトに実際に存在する各値に対して一回、与えられた callback を実行します。削除された値に対しては呼び出されません。ですが、undefined の値をもつ要素に対しては実行されます。

callback3つの引数で呼び出されます。

Set オブジェクトにキーはありません。しかし、最初の 2 つの引数は、両方とも {{jsxref("Set")}} に含まれるです。そのため callback 関数は {{jsxref("Map.foreach", "Map")}} や {{jsxref("Array.forEach","Array")}} の forEach() メソッドと矛盾がありません。

thisArg 引数が forEach() に与えられた場合、呼び出されたときに this 値として使用するために callback に渡されます。さもなければ、this 値として使用するために undefined 値が渡されます。callback によって最終的に観測可能な this 値は関数から見た this を決定するための通常のルールに応じて決定されます。

各値は一度だけ訪問されますが、 forEach() が終了する前に削除・再追加された場合は例外です。 到達する前に削除された値に対しては callback は実行されません。 forEach() が終了する前に追加された新規の値は訪問されます。

forEach()Set オブジェクト内の各要素に対して一回 callback 関数を実行します。forEach() は値を返しません。

Set オブジェクトの内容を出力する

次のコードでは、Set オブジェクト内の各要素に対してログを出力します。

function logSetElements(value1, value2, set) {
    console.log('s[' + value1 + '] = ' + value2);
}

new Set(['foo', 'bar', undefined]).forEach(logSetElements);

// logs:
// "s[foo] = foo"
// "s[bar] = bar"
// "s[undefined] = undefined"

仕様書

仕様書
{{SpecName('ESDraft', '#sec-set.prototype.foreach', 'Set.prototype.forEach')}}

ブラウザーの互換性

{{Compat("javascript.builtins.Set.forEach")}}

関連情報