首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用groupBy时,我应该把它放在哪里?

使用groupBy时,我应该把它放在哪里?
EN

Stack Overflow用户
提问于 2021-01-26 16:14:34
回答 2查看 455关注 0票数 0

我正在通过DataWeave教程(极力推荐的!)在dwlang.fun上学习,最后我被“与对象一起工作”章节的“拔取”部分搞糊涂了。输入是一个由四个命令行组成的数组,我需要按顺序id对其进行分组。输入是

代码语言:javascript
复制
[
  {
    "orderId"  : 1,
    "customer" : "Josh",
    "lineId"   : 1,
    "lineItem" : "Shoes",
    "price"    : 50
  },
  {
    "orderId"  : 1,
    "customer" : "Josh",
    "lineId"   : 2,
    "lineItem" : "Socks",
    "price"    : 20
  },
  {
    "orderId"  : 2,
    "customer" : "Mariano",
    "lineId"   : 3,
    "lineItem" : "Shirt",
    "price"    : 30
  },
  {
    "orderId"  : 2,
    "customer" : "Mariano",
    "lineId"   : 4,
    "lineItem" : "Jacket",
    "price"    : 80
  }
]

所需的输出是一个单独的数组,其中包含其自己数组中的每个顺序:

代码语言:javascript
复制
[
  [
    {
      "orderId": 1,
      "customer": "Josh",
      "lineId": 1,
      "lineItem": "Shoes",
      "price": 50
    },
    {
      "orderId": 1,
      "customer": "Josh",
      "lineId": 2,
      "lineItem": "Socks",
      "price": 20
    }
  ],
  [
    {
      "orderId": 2,
      "customer": "Mariano",
      "lineId": 3,
      "lineItem": "Shirt",
      "price": 30
    },
    {
      "orderId": 2,
      "customer": "Mariano",
      "lineId": 4,
      "lineItem": "Jacket",
      "price": 80
    }
  ]
]

我的代码已接近,但分组已关闭。我的代码是

代码语言:javascript
复制
%dw 2.0
output json
var myData = payload
    map (order, index) -> {
        (order pluck (v, k, idx) -> {
            (k): v
        })
  }
---
myData groupBy ((order, index) -> order.orderId)

我的产出是:

代码语言:javascript
复制
{
  "1": [
    {
      "orderId": 1,
      "customer": "Josh",
      "lineId": 1,
      "lineItem": "Shoes",
      "price": 50
    },
    {
      "orderId": 1,
      "customer": "Josh",
      "lineId": 2,
      "lineItem": "Socks",
      "price": 20
    }
  ],
  "2": [
    {
      "orderId": 2,
      "customer": "Mariano",
      "lineId": 3,
      "lineItem": "Shirt",
      "price": 30
    },
    {
      "orderId": 2,
      "customer": "Mariano",
      "lineId": 4,
      "lineItem": "Jacket",
      "price": 80
    }
  ]
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-01-26 17:13:37

我不确定myData是否有用,我删除了它。我在groupBy()之后使用了pluck()来收集每个组键的值,这似乎是预期的结果:

代码语言:javascript
复制
%dw 2.0
output application/json
---
payload 
    groupBy ((order, index) -> order.orderId)
    pluck ((value, key, index) -> value)
票数 1
EN

Stack Overflow用户

发布于 2021-06-05 07:01:51

这里有一个替代的解决方案(没有拔掉)

代码语言:javascript
复制
%dw 2.0
output application/json
var groupedOrders=payload groupBy (item, index) -> item.orderId
---
(groupedOrders mapObject(v0,k0) ->
{
    'key':(v0)
}).*'key'
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65904987

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档