Flex Gateway新着情報
Governance新着情報
Monitoring API Manager配列の要素に縮小式を適用します。
reduce
は、入力配列の各要素に対して順番に縮小ラムダ式 (関数) を適用し、アキュムレーターを新しい結果で置き換えます。このラムダ式では、現在の入力配列要素と現在のアキュムレーター値の両方を使用できます。
配列が空で、アキュムレーターパラメーターにデフォルト値が設定されていない場合、null 値が返されます。
名前 | 説明 |
---|---|
|
入力配列の項目。縮小する値を提供します。 |
|
アキュムレーター。 アキュムレーターパラメーターは構文 アキュムレーターの初期値が設定されていない場合、アキュムレーターは入力配列の最初の要素に設定されます。次に、ラムダ式は入力配列の 2 番目の要素を使用してコールされます。 アキュムレーターの初期値とラムダ式によって、 |
次の sum
の例では数値を加算し、concat
の例ではその同じ数値を連結し、emptyList
の例では空の配列 []
(myEmptyList
で定義) が null
を返すことを示します。
次の例では、最初の入力配列からの最初の要素を "z"
に設定し、3
を 2 番目の入力配列の合計に加算します。multiply
では、配列の各値をその横の値で乗算し ([2,3,3] reduce ((item, acc) → acc * item)
)、最終結果の 18
(= 2 * 3 * 3
) を生成する方法を示しています。最後の例 (multiplyAcc
) では、アキュムレーターを 3
に設定し、acc * item
(= 12
) の結果を 3
で乗算します (つまり、3 (2 * 2 * 3) = 36
)。出力を参照してください。
%dw 2.0
output application/json
---
{
"concat" : ["a", "b", "c", "d"] reduce ((item, acc = "z") -> acc ++ item),
"sum": [0, 1, 2, 3, 4, 5] reduce ((item, acc = 3) -> acc + item),
"multiply" : [2,3,3] reduce ((item, acc) -> acc * item),
"multiplyAcc" : [2,2,3] reduce ((item, acc = 3) -> acc * item)
}
次の例は、reduce
のさまざまな使用方法を示します。たとえば、
Boolean (ブール) 値やオブジェクトの配列への適用例などがあります。
%dw 2.0
output application/json
var myVar =
{
"a": [0, 1, 2, 3, 4, 5],
"b": ["a", "b", "c", "d", "e"],
"c": [{ "letter": "a" }, { "letter": "b" }, { "letter": "c" }],
"d": [true, false, false, true, true]
}
---
{
"a" : [0, 1, 2, 3, 4, 5] reduce $$,
"b": ["a", "b", "c", "d", "e"] reduce $$,
"c": [{ "letter": "a" }, { "letter": "b" }, { "letter": "c" }] reduce ((item, acc = "z") -> acc ++ item.letter),
"d": [{ letter: "a" }, { letter: "b" }, { letter: "c" }] reduce $$,
"e": [true, false, false, true, true] reduce ($$ and $),
"f": [true, false, false, true, true] reduce ((item, acc) -> acc and item),
"g": [true, false, false, true, true] reduce ((item, acc = false) -> acc and item),
"h": [true, false, false, true, true] reduce $$,
"i": myVar.a reduce ($$ + $),
"j": myVar.a reduce ((item, acc) -> acc + item),
"k": myVar.a reduce ((item, acc = 3) -> acc + item),
"l": myVar.a reduce $$,
"m": myVar.b reduce ($$ ++ $),
"n": myVar.b reduce ((item, acc) -> acc ++ item),
"o": myVar.b reduce ((item, acc = "z") -> acc ++ item),
"p": myVar.b reduce $$,
"q": myVar.c reduce ((item, acc = "z") -> acc ++ item.letter),
"r": myVar.c reduce $$,
"s": myVar.d reduce ($$ and $),
"t": myVar.d reduce ((item, acc) -> acc and item),
"u": myVar.d reduce ((item, acc = false) -> acc and item),
"v": myVar.d reduce $$,
"w": ([0, 1, 2, 3, 4] reduce ((item, acc = {}) -> acc ++ { a: item })) pluck $,
"x": [] reduce $$,
"y": [] reduce ((item,acc = 0) -> acc + item)
}
"a": 0,
"b": "a",
"c": "zabc",
"d": { "letter": "a" },
"e": false,
"f": false,
"g": false,
"h": true,
"i": 15,
"j": 15,
"k": 18,
"l": 0,
"m": "abcde",
"n": "abcde",
"o": "zabcde",
"p": "a",
"q": "zabc",
"r": { "letter": "a" },
"s": false,
"t": false,
"u": false,
"v": true,
"w": [ 0,1,2,3,4 ],
"x": null,
"y": 0
}