Вам необходимо сгруппировать элементы по effDate
, а затем сопоставить группы с нужной формой, используя _.pick()
/ _.omit()
, _.map()
и используя _.uniqBy()
с rate
в качестве уникальногоидентификатор.
Пример машинописного текста (открыть консоль браузера)
const { flow, partialRight: pr, groupBy, map, head, pick, omit, uniqBy } = _
const EFF_DATA = 'effDate'
const baseProps = ['dc', EFF_DATA, 'expDate']
const fn = flow(
pr(groupBy, EFF_DATA),
pr(map, g => ({
...pick(head(g), baseProps),
rateCharge: uniqBy(map(g, pr(omit, baseProps)), 'rate')
}))
)
const data = [{"dc":1,"effDate":"1/2/2019","expDate":"1/2/2019","rate":1,"minCharge":2},{"dc":1,"effDate":"1/2/2019","expDate":"1/2/2019","rate":2,"minCharge":6},{"dc":1,"effDate":"1/2/2019","expDate":"1/2/2019","rate":4,"minCharge":7}]
const result = fn(data)
console.log(result)
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.11/lodash.min.js"></script>
Если вы уже импортировали целые пакеты lodash, вы можете использовать цепочку:
const { flow, partialRight: pr, groupBy, map, head, pick, omit, uniqBy } = _
const EFF_DATA = 'effDate'
const baseProps = ['dc', EFF_DATA, 'expDate']
const data = [{"dc":1,"effDate":"1/2/2019","expDate":"1/2/2019","rate":1,"minCharge":2},{"dc":1,"effDate":"1/2/2019","expDate":"1/2/2019","rate":2,"minCharge":6},{"dc":1,"effDate":"1/2/2019","expDate":"1/2/2019","rate":4,"minCharge":7}]
const result = _(data)
.groupBy(EFF_DATA)
.map(g => ({
...pick(head(g), baseProps),
rateCharge: uniqBy(map(g, pr(omit, baseProps)), 'rate')
}));
console.log(result)
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.11/lodash.min.js"></script>
И версия lodash / fp:
const { flow, groupBy, map, head, pick, omit, uniqBy, assoc } = _;
const EFF_DATA = 'effDate'
const baseProps = ['dc', EFF_DATA, 'expDate'];
const fn = flow(
groupBy(EFF_DATA),
map(g => assoc(
'rateCharge',
flow(map(omit(baseProps)), uniqBy('rate'))(g),
pick(baseProps, head(g))
))
)
const data = [{"dc":1,"effDate":"1/2/2019","expDate":"1/2/2019","rate":1,"minCharge":2},{"dc":1,"effDate":"1/2/2019","expDate":"1/2/2019","rate":2,"minCharge":6},{"dc":1,"effDate":"1/2/2019","expDate":"1/2/2019","rate":4,"minCharge":7}]
const result = fn(data)
console.log(result)
<script src='https://cdn.jsdelivr.net/g/lodash@4(lodash.min.js+lodash.fp.min.js)'></script>