首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用do替换数据编织

用do替换数据编织
EN

Stack Overflow用户
提问于 2020-05-18 02:04:18
回答 2查看 790关注 0票数 1

我有一个场景,我试图从有效负载中删除空和空对象,并找到以下函数,但是我知道“the”被替换为"do“。我想知道它是什么样子的:

这是代码

代码语言:javascript
复制
%dw 2.0
fun filterValue(value) = value match {
    case is Object -> filterKeyValuePairs(value)
    case is Array -> $ map filterValue($) filter (not (isEmpty($)))
    else -> value
}
fun filterKeyValuePairs(value) = value mapObject (value, key, index) ->
using (filteredValue = filterValue(value)){
    ((key): filteredValue) if (not isEmpty(filteredValue))
}

---
filterValue(payload)
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-05-18 02:35:17

与do相同的代码;do基本上为您提供了header --- body

代码语言:javascript
复制
%dw 2.0
fun filterValue(value) = value match {
    case is Object -> filterKeyValuePairs(value)
    case is Array -> $ map filterValue($) filter (not (isEmpty($)))
    else -> value
}
fun filterKeyValuePairs(value) = value mapObject (value, key, index) -> do {
    var filteredValue = filterValue(value)
    ---
    ((key): filteredValue) if (not isEmpty(filteredValue))
}
---
filterValue(payload)

如果您想在没有第二个函数的情况下这样做:

代码语言:javascript
复制
%dw 2.0
fun filterValue(value) = value match {
    case is Object -> $ mapObject do {
        var filteredVal = filterValue($)
        ---
        (($$): filteredVal) if (not (isEmpty(filteredVal)))
    }
    case is Array -> $ map filterValue($) filter (not (isEmpty($)))
    else -> value
}
---
filterValue(payload)

您还可以考虑将其更改一些,以便将过滤器作为一个函数来进行筛选,这样就可以对除空值之外的其他内容进行筛选:

代码语言:javascript
复制
fun filterObjectAndArrays(value, fn: (v: Any) -> Boolean) = value match {
    case is Object -> $ mapObject do {
        var filteredVal = filterObjectAndArrays($, fn)
        ---
        (($$): filteredVal) if (fn(filteredVal))
    }
    case is Array -> $ map filterObjectAndArrays($, fn) filter (fn($))
    else -> value
}
---
//payload filterObjectAndArrays (not isEmpty($))
payload filterObjectAndArrays ($ != "a")
票数 3
EN

Stack Overflow用户

发布于 2020-05-19 14:11:12

你试过使用skipOnNull吗?它还删除空对象:

看看这个

skipNullOn

代码语言:javascript
复制
Skips null values in the specified data structure. By default, it does not skip the values. Valid values are elements, attributes, or everywhere.

arrays
Ignore and omit null values from JSON output, for example, output application/json skipNullOn="arrays".

objects+ Ignore an object that has a null value. The output contains an empty object ({}) instead of the object with the null value, for example, output application/json skipNullOn="objects".

everywhere
Apply skipNullOn to arrays and objects, for example, output application/json skipNullOn="everywhere"
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61861318

复制
相关文章

相似问题

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