reduce

reduce<T>(@StreamCapable items: Array<T>, callback: (item: T, accumulator: T) -> T): T | Null

配列の要素に縮小式を適用します。

reduce​ は、入力配列の各要素に対して順番に縮小ラムダ式 (関数) を適用し、アキュムレーターを新しい結果で置き換えます。このラムダ式では、現在の入力配列要素と現在のアキュムレーター値の両方を使用できます。

配列が空で、アキュムレーターパラメーターにデフォルト値が設定されていない場合、null 値が返されます。

パラメーター

名前 説明

item

入力配列の項目。縮小する値を提供します。​$​ として参照することもできます。

acc

アキュムレーター。​$$​ として参照することもできます。​reduce​ 操作の反復後に毎回、ラムダ式の結果を保存するために使用します。

アキュムレーターパラメーターは構文 ​acc = initValue​ を使用して初期値に設定できます。この場合、ラムダ式は入力配列の最初の要素を使用してコールされます。次に、その結果が新しいアキュムレーター値として設定されます。

アキュムレーターの初期値が設定されていない場合、アキュムレーターは入力配列の最初の要素に設定されます。次に、ラムダ式は入力配列の 2 番目の要素を使用してコールされます。

アキュムレーターの初期値とラムダ式によって、​reduce​ 関数で作成される結果の型が決まります。アキュムレーターが ​acc = {}​ に設定されている場合、結果は通常 ​Object​ (オブジェクト) 型になります。アキュムレーターが ​acc = []​ に設定されている場合、結果は通常 ​Array​ (配列) 型になります。アキュムレーターが ​acc = ""​ に設定されている場合、結果は通常 ​String​ (文字列) 型になります。

次の例では、数値の合計を最初の入力配列に返します。

ソース

%dw 2.0
output application/json
---
[2, 3] reduce ($ + $$)
DataWeave

出力

5
JSON

次の ​sum​ の例では数値を加算し、​concat​ の例ではその同じ数値を連結し、​emptyList​ の例では空の配列 ​[]​ (​myEmptyList​ で定義) が ​null​ を返すことを示します。

ソース

%dw 2.0
var myNums = [1,2,3,4]
var myEmptyList = []
output application/json
---
{
   "sum" : myNums reduce ($$ + $),
   "concat" : myNums reduce ($$ ++ $),
   "emptyList" : myEmptyList reduce ($$ ++ $)
}
DataWeave

出力

{ "sum": 10, "concat": "1234", "emptyList": null }
JSON

次の例では、最初の入力配列からの最初の要素を ​"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)
}
DataWeave

出力

{ "concat": "zabcd", "sum": 18, "multiply": 18, "multiplyAcc": 36 }
JSON

次の例は、​reduce​ のさまざまな使用方法を示します。たとえば、 Boolean (ブール) 値やオブジェクトの配列への適用例などがあります。

ソース

出力

"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
}
JSON

reduce<T, A>(@StreamCapable items: Array<T>, callback: (item: T, accumulator: A) -> A): A

reduce(@StreamCapable text: String, callback: (item: String, accumulator: String) -> String): String

文字列の文字に縮小式を適用します。

reduce​ は、入力文字列の各文字に対して順番に縮小ラムダ式 (関数) を適用し、アキュムレーターを新しい結果で置き換えます。このラムダ式では、現在の文字と現在のアキュムレーター値の両方を使用できます。

文字列が空で、アキュムレーターパラメーターにデフォルト値が設定されていない場合、空の文字列が返されます。

パラメーター

名前 説明

text

減算する文字列。

callback

適用する関数。

次の例では、​reduce​ を使用して文字列を反転させる方法を示しています。

ソース

%dw 2.0
output application/json
---
"hello world" reduce (item, acc = "") -> item ++ acc
DataWeave

出力

"dlrow olleh"
Json

reduce<A>(@StreamCapable text: String, callback: (item: String, accumulator: A) -> A): A

reduce<T, A>(@StreamCapable items: Null, callback: (item: T, accumulator: A) -> A): Null

reduce​ を ​null​ 値に使用できるようにするヘルパー関数。