我将给出一个更一般的答案,该答案不仅可以通过“A”区分,而且可以通过“B”区分,因为在问题措辞中不清楚是否仅通过“A”区分就足够了。尽管您的数据编织尝试仅通过“A”来区分,但您的示例只有两个相等的 As 而没有两个相等的 B - 这是一种特定情况。所以我会假设没有两个 As 应该相等,也没有两个 Bs 应该相等。
一些具有所需输出的示例:
Example(i): [{A:'1',B:'1'},{A:'2',B:'2'},{A:'3',B:'2'}] -> [{A:'1',B:'1'},{A:'2',B:'2'}]
Example(ii): [{A:'1',B:'1'},{A:'2',B:'2'},{A:'2',B:'2'}] -> [{A:'1',B:'1'},{A:'2',B:'2'}]
Example(iii): [{A:'1',B:'1'},{A:'2',B:'2'},{A:'2',B:'3'}] -> [{A:'1',B:'1'},{A:'2',B:'2'}]
Example(iv): [{"A":'1',"B":'1'},{"A":'2',"B":'2'},{"A":'3',"B":'2'},{"A":'2',"B":'2'}] -> [{A:'1',B:'1'},{A:'2',B:'2'}]
- 一个人可能很想这样做
arr distinctBy ($.A + $.B)
。但这仅适用于示例(ii)的情况,因为它将通过组合 A 和 B 来区分。示例(i)和示例(iii)将保持不变。Example(iv) 将转换为[{"A":'1',"B":'1'},{"A":'2',"B":'2'},{"A":'3',"B":'2'}]
.
- 因此,要达到既定的目标,即没有两个 A 相等,也没有两个 B 相等,我们必须先用“A”区分,然后用“B”区分,然后找到两者之间的公共重叠数组。所以我使用过滤器和包含来实现这一点,如下所示:
%dw 2.0
output application/json
var arr = [{"A":'1',"B":'1'},{"A":'2',"B":'2'},{"A":'3',"B":'2'}]
---
(arr distinctBy $.A) filter ((arr distinctBy $.B) contains $)