groupBy

groupBy<T, R>(items: Array<T>, criteria: (item: T, index: Number) -> R): {| (R): Array<T> |}

指定された条件 (式や一致セレクターなど) に基づいて配列の項目をグループ化するオブジェクトを返します。

このバージョンの ​groupBy​ は、​criteria​ 関数を使用して配列の要素をグループ化します。その他のバージョンは、オブジェクトで動作し、null 値を処理します。

パラメーター

名前 説明

items

グループ化する配列。

criteria

配列の項目をグループ化するための条件を提供する式。

次の例では、入力配列 ​["a","b","c"]​ の項目をインデックスでグループ化します。数値インデックスが文字列として返され、配列の項目 (または値) が配列 (この場合はそれぞれに 1 つの項目を含む) として返されます。配列の項目は、名前付きパラメーター (​item​ および ​index​) を使用する匿名関数 ​(item, index) → index​ に基づいてグループ化されます。 ["a","b","c"] groupBy $$​ のように、匿名パラメーター ​$$​ を使用して同じ結果を生成し、配列のインデックスを特定できます。

ソース

%dw 2.0
output application/json
---
["a","b","c"] groupBy (item, index) -> index

出力

{ "2": [ "c" ], "1": [ "b" ], "0": [ "a" ] }

次の例では、言語項目に基づいて配列の要素をグループ化します。 グループ化条件を指定するために ​item.language​ セレクターが使用されています。このため、結果のオブジェクトでは、入力からの「language」値 (​"Scala"​ と ​"Java"​) を使用して出力をグループ化します。また、出力の配列には各入力オブジェクトが配置されています。

ソース

%dw 2.0
var myArray = [
   { "name": "Foo", "language": "Java" },
   { "name": "Bar", "language": "Scala" },
   { "name": "FooBar", "language": "Java" }
]
output application/json
---
myArray groupBy (item) -> item.language

出力

{
  "Scala": [
    { "name": "Bar", "language": "Scala" }
  ],
  "Java": [
    { "name": "Foo", "language": "Java" },
    { "name": "FooBar", "language": "Java" }
  ]
}

次の例では、​groupBy "myLabels"​ を使用して、​"mylabels"​ をキーとして、選択された値の配列 (​["Open New", "Zoom In", "Zoom Out", "Original View" ]​) を値とするオブジェクトを返します。配列の作成にはセレクター (​myVar.menu.items.*label​) が使用されています。このセレクターは、​"label"​ をキーとするすべての値を保持しますが、​"id"​ をキーとする値を除外します。

ソース

%dw 2.0
var myVar = { menu: {
    header: "Move Items",
    items: [
        {"id": "internal"},
        {"id": "left", "label": "Move Left"},
        {"id": "right", "label": "Move Right"},
        {"id": "up", "label": "Move Up"},
        {"id": "down", "label": "Move Down"}
    ]
}}
output application/json
---
(myVar.menu.items.*label groupBy "myLabels")

出力

{ "myLabels": [ "Move Left", "Move Right", "Move Up", "Move Down" ] }

groupBy<R>(text: String, criteria: (character: String, index: Number) -> R): { (R): String }

指定された条件 (式や一致セレクターなど) に基づいて文字列の文字をグループ化するオブジェクトを返します。

このバージョンの ​groupBy​ は、​criteria​ 関数を使用して配列の要素をグループ化します。その他のバージョンは、オブジェクトで動作し、​null​ 値を処理します。

パラメーター

名前 説明

text

グループ化する文字列。

criteria

使用する条件。

次の例では、​groupBy​ を使用して文字列を母音と母音以外に分割する方法を示しています。

ソース

%dw 2.0
output application/json
---
"hello world!" groupBy (not isEmpty($ find /[aeiou]/))

出力

{
  "false": "hll wrld!",
  "true": "eoo"
}

groupBy<K, V, R>(object: { (K)?: V }, criteria: (value: V, key: K) -> R): { (R): { (K)?: V } }

入力内の要素を反復処理するために ​groupBy​ で使用する条件に基づいて、オブジェクトの要素をグループ化します。

パラメーター

名前 説明

object

グループ化するオブジェクトを含むオブジェクト。

criteria

グループ化に使用するオブジェクトの ​key​ や ​value​ など、入力オブジェクト内の要素に適用するグループ化条件。

次の例では、入力オブジェクト内の各キーの値の代わりに匿名パラメーター ​$​ を使用して、オブジェクトの配列内のオブジェクトをグループ化します。この値には DataWeave ​upper​ 関数が適用されます。出力では、この値は大文字のキーになります。​{ "a" : "b", "c" : "d"} groupBy (value) → upper(value)​ にように、匿名関数の代わりに名前付きパラメーターを使用して、同じ例を記述することもできます。

ソース

%dw 2.0
output application/json
---
{ "a" : "b", "c" : "d"} groupBy upper($)

出力

{ "D": { "c": "d" }, "B": { "a": "b" } }

次の例では、​groupBy "costs"​ を使用して XML オブジェクトから JSON オブジェクトを生成します。JSON オブジェクトでは、​"costs"​ がキーになり、XML 要素 ​prices​ の選択された値が JSON 値 (​{ "price": "9.99", "price": "10.99" }​) になります。

ソース

%dw 2.0
var myRead =
read("<prices><price>9.99</price><price>10.99</price></prices>","application/xml")
output application/json
---
myRead.prices groupBy "costs"

出力

{ "costs" : { "price": "9.99", "price": "10.99" } }

groupBy(value: Null, criteria: (Nothing, Nothing) -> Any): Null

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