---
schema_version: "1"
id: 4e5be6a1bafbf76db3004bb9456686b875e51d382be21d7ef2859f51b7ee3c53
title: reduce
collection: mulesoft
version: current
locale: ja-jp
portal_url: https://docs.salesforce.com/mulesoft/current/ja-jp/dataweave/2.5/dw-core-functions-reduce.md
canonical_url: https://docs.mulesoft.com/jp/dataweave/2.5/dw-core-functions-reduce
source_site: docs.mulesoft.com
content_type: documentation
content_hash: 90a684c5f5a3db426aedbe7ae3e2dc20153715e93c7ad94c2e6dc7ce859ebe09
description: MuleSoft Documentation Site
release: "2.5"
latest: false
---
# reduce

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

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

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

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

### [](#パラメーター)パラメーター

<table class="tableblock frame-all grid-all stretch">
<colgroup>
<col style="width: 25%;">
<col style="width: 75%;">
</colgroup>
<thead>
<tr>
<th class="tableblock halign-left valign-top">名前</th>
<th class="tableblock halign-left valign-top">説明</th>
</tr>
</thead>
<tbody>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>item</code></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">入力配列の項目。縮小する値を提供します。​<code>$</code>​ として参照することもできます。</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>acc</code></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">アキュムレーター。​<code>$</code>​ として参照することもできます。​<code>reduce</code>​ 操作の反復後に毎回、ラムダ式の結果を保存するために使用します。</p>
<p class="tableblock">アキュムレーターパラメーターは構文 ​<code>acc = initValue</code>​ を使用して初期値に設定できます。この場合、ラムダ式は入力配列の最初の要素を使用してコールされます。次に、その結果が新しいアキュムレーター値として設定されます。</p>
<p class="tableblock">アキュムレーターの初期値が設定されていない場合、アキュムレーターは入力配列の最初の要素に設定されます。次に、ラムダ式は入力配列の 2 番目の要素を使用してコールされます。</p>
<p class="tableblock">アキュムレーターの初期値とラムダ式によって、​<code>reduce</code>​ 関数で作成される結果の型が決まります。アキュムレーターが ​<code>acc = {}</code>​ に設定されている場合、結果は通常 ​<code>Object</code>​ (オブジェクト) 型になります。アキュムレーターが ​<code>acc = []</code>​ に設定されている場合、結果は通常 ​<code>Array</code>​ (配列) 型になります。アキュムレーターが ​<code>acc = ""</code>​ に設定されている場合、結果は通常 ​<code>String</code>​ (文字列) 型になります。</p></td>
</tr>
</tbody>
</table>

### [](#例)例

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

#### [](#ソース)ソース

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

#### [](#出力)出力

```JSON
5
```

### [](#例-2)例

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

#### [](#ソース-2)ソース

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

#### [](#出力-2)出力

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

### [](#例-3)例

次の例では、最初の入力配列からの最初の要素を ​`"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`​)。出力を参照してください。

#### [](#ソース-3)ソース

```DataWeave
%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)
}
```

#### [](#出力-3)出力

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

### [](#例-4)例

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

#### [](#ソース-4)ソース

```DataWeave
%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)
}
```

#### [](#出力-4)出力

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

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

## [](#reduce3)reduce(@StreamCapable text: String, callback: (item: String, accumulator: String) -> String): String

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

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

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

### [](#パラメーター-2)パラメーター

<table class="tableblock frame-all grid-all stretch">
<colgroup>
<col style="width: 25%;">
<col style="width: 75%;">
</colgroup>
<thead>
<tr>
<th class="tableblock halign-left valign-top">名前</th>
<th class="tableblock halign-left valign-top">説明</th>
</tr>
</thead>
<tbody>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>text</code></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">減算する文字列。</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>callback</code></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">適用する関数。</p></td>
</tr>
</tbody>
</table>

### [](#例-5)例

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

#### [](#ソース-5)ソース

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

#### [](#出力-5)出力

```Json
"dlrow olleh"
```

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

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

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