Я дам более общий ответ, который будет отличаться не только от «А», но и от «В», потому что в формулировке вопроса неясно, достаточно ли различать только «А». Хотя ваша структура данных пытается различить только «A», в вашем примере только два равных As и нет двух равных B - что является одним конкретным случаем.
Поэтому я буду считать, что никакие два As не должны быть равными, и никакие два B не должны быть равными.
Некоторые примеры с желаемыми выходами:
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), потому что он будет различаться по объединенным А и В. Пример (i) и пример (iii) останутся без изменений. Пример (iv) преобразуется в [{"A":'1',"B":'1'},{"A":'2',"B":'2'},{"A":'3',"B":'2'}]
.
- Таким образом, чтобы достичь заявленной цели, нет двух As равных и нет двух 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 $)